• 2

Excel vba 關於跨表單問題

各位高手,小弟想請問,我之前用
For a =1 to 10 step 1
Me("leabel"&1+a). caption=......(略)
Next a

這樣是沒問題
可是因為我要跨表單
Userfrom1.leabel1=userfrom2.leabe1
這樣的狀況,我該怎麼寫??
謝謝
2019-10-07 17:44 發佈
for a=1 to 3
UserForm1.Controls("label" & a).Caption = UserForm2.Controls("label" & a).Caption
next a
snare wrote:
for a=1 to...(恕刪)



感謝大大,方便問一下me跟controls有什麼不一樣嗎?官方寫的漏漏長,我整個看不懂
shps1129 wrote:
me跟controls有什麼不一樣嗎...(恕刪)


這是不同東西,完全不一樣

真要省略也可以,我是習慣加上controls
userform1("label" & a).caption=userform2("label" & a).caption

me 是方便寫程式用的語法,指的是"現在程式碼的所在位置"

例如:程式碼在thisworkbook裡面
thisworkbook.name
可用
me.name
代替

例如:程式碼在“工作表1”裡面
sheets("工作表1").range("a1")="abc"
可用
me.range("a1")="abc"
代替

userform1 <=> userform2 是2個不同位置
所以不可以用 me()=me()
最多可以用一個,要看"正在執行的程式碼"是寫在那邊
在userform1
me()=userform2()

建議用指定名稱,比較安全,出錯時也比較容易除錯

shps1129 wrote:
Userfrom1.leabel1=userfrom2.leabe1...(恕刪)


如果不跑迴圈,您這種寫法就可以了
Userfrom1.label1=userfrom2.label1
snare wrote:
這是不同東西,完全不...(恕刪)


請教一下:
userform1與2 是否是同時開啟兩張表單?
甚麼步驟下可同時開啟?
因為,本人一次只能開一張表單!

問題可能有點缺乏觀念,請解疑,謝謝!
smash15 wrote:
userform1與2 是否是同時開啟兩張表單?...(恕刪)



Sub test()

UserForm1.Show 0
UserForm1.Top = 100
UserForm1.Left = 200

UserForm2.Show 0
UserForm2.Top = 200
UserForm2.Left = 400

End Sub


https://docs.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/show-method
https://docs.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/startupposition-property
snare wrote:
Sub test()...(恕刪)


原來如此!
感謝釋疑...
---------------------------
再請教:
有一張工作表啟動 SelectionChange
用第一個模組處理
同一工作表用第二個模組時必須把 SelectionChange 關閉,才不會產生錯誤!
請問有何方法?

例:
.range("A1")...第一模組可正常工作
但,第二模組的工作範圍是 .range("A1:A7") ,會出現型態的錯誤!
------------------------------------------------------------------------------------------------------------
5分奉上

感謝!
可以用儲存格範圍限制觸發條件

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For Each Rng In [A1:A7]
If Rng.Address = Target.Address Then
UserForm2.Show
Exit For
End If
Next
End Sub

儲存格範圍大時,用迴圈可能會比較慢,可以改用row/column限制

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 1 And Target.Row < 8 Then
UserForm2.Show
End If
End Sub
smash15 wrote:
.range("A1")...第一模組可正常工作
但,第二模組的工作範圍是 .range("A1:A7") ,會出現型態的錯誤!...(恕刪)


看不懂
請上傳一個簡易範例,或等其它高手回答

f10629 wrote:
儲存格範圍大時,用迴圈可能會比較慢,可以改用row/column限制...(恕刪)


可以改用Intersect,不用迴圈,可直接指定範圍

'範例: 工作表1 a5: b10 範圍
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

On Error Resume Next
If Intersect(Target, Worksheets("工作表1").Range("a5:b10")) Is Nothing Then
'範圍外,或切換到不同工作表
'程式碼放這裡
Else
'範圍內
'程式碼放這裡
End If

End Sub
f10629 wrote:
可以用儲存格範圍限制...(恕刪)


所提供的方法,可以用滑鼠按A1~A7 呼叫出第二個表單。
有些應用可以用得到!
謝謝!
  • 2
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?