Board logo

標題: [發問] 各位老師vba 改善獲取指定頁的程式內有程序代碼! [打印本頁]

作者: marco2000    時間: 2014-2-18 10:51     標題: 各位老師vba 改善獲取指定頁的程式內有程序代碼!

本帖最後由 GBKEE 於 2014-2-19 15:00 編輯
  1. Private Sub OptionButton1_Click() 'for default page
  2. Dim Arr(1 To 20) As String
  3. 'Dim thisworkbook As Workbook

  4. Arr(1) = "xxx1109"
  5. Arr(2) = "xxx1160"
  6. Arr(3) = "xxx1150"
  7. Arr(4) = "xxx1110"
  8. Arr(5) = "xxx1130"
  9. Arr(6) = "xxx1141"
  10. Arr(7) = "xxx1171"
  11. Arr(8) = "xxx1172"
  12. Arr(9) = "xxx1173"
  13. Arr(10) = "xxx1176"
  14. Arr(11) = "xxx1174"
  15. Arr(12) = "xxx1175"
  16. Arr(13) = "xxx1623"
  17. Arr(14) = "xxx1180"
  18. Arr(15) = "xxx1201"
  19. Arr(16) = "xxx1610"
  20. Arr(17) = "xxx1621"
  21. Arr(18) = "xxx1622"
  22. Arr(19) = "xxx1630"
  23. Arr(20) = "xxx1710"
  24. For A = 1 To 20
  25. UserForm1.ListBox2.AddItem (Arr(A))
  26. Next A

  27. End Sub
複製代碼
各位老師,我想選取指定的excel頁,共有20頁

我現在寫的方法是定了檔名​​arr(1)xxx1109,

舉例第一個是xxx1109,當頁名是xxx1109


就會在ListBox顯示,但xxx是會變動的,數字就不會變

xxx一轉,如改成頁名zzzz1109 我就選取不到了

有方法用搜查數字,從而選取xxx1109/zzzz1109嗎?


我的意思就是遍歷所有表格名稱
然後提取每個表名稱最後的四個字符進行匹配,再添加進列表。
請問各位可以寫程序代碼出來教教我嗎??


上傳了附件,求教
作者: Kubi    時間: 2014-2-18 11:20

因無資格下載檔案,用猜的。
cw = "1109,1160,1150,1110,1130,1141,1171,1172,1173,1176,1174,1175,1623,1180,1201,1610,1621,1622,1630,1710"
For Each sh In Worksheets
    If InStr(cw, Right(sh.Name, 4)) <> 0 Then UserForm1.ListBox2.AddItem sh.Name
Next sh
作者: marco2000    時間: 2014-2-18 13:05

回復 2# Kubi


  我先試試,感謝你的回覆:'(
作者: marco2000    時間: 2014-2-18 13:19

回復 2# Kubi


大大你的程序代碼,很幫到我
另外請問大大你還會在UserForm1.ListBox2
顯示選取了多少個檔案?我的意思是用你的程序,在UserForm1.ListBox2,找到有3個檔案
就會出現"已選取3個檔案"的句子嗎
作者: marco2000    時間: 2014-2-18 13:21

多謝板主提醒,這是excel檔
作者: Kubi    時間: 2014-2-18 13:51

回復 5# marco2000

無資格下載檔案...
看看底下是否是版大所需?
For i = 0 To ListBox2.ListCount - 1
    If ListBox2.Selected(i) = True Then n = n + 1
Next
MsgBox "已經選取 " & n & " 個檔案"
作者: Kubi    時間: 2014-2-18 14:05

6# 是說於ListBox2內(可MultiSelect)選取幾個檔案,若是要知道找到了幾個檔案,以及ListBox2內選取幾個檔案於則是用:
For i = 0 To ListBox2.ListCount - 1
    If ListBox1.Selected(i) = True Then n = n + 1
Next
MsgBox "於" & ListBox2.ListCount & " 個被找到的檔案中,已選了取 " & n & " 個檔案"
作者: marco2000    時間: 2014-2-18 14:24

試了啦,大大你很強,是我想要的效果
我想在彈出到MsgBox加YES/NO
YES就運行另一個CommandButton3_Click  程式,NO就不變
作者: marco2000    時間: 2014-2-18 14:25

回復 7# Kubi


    真的無言感激
作者: marco2000    時間: 2014-2-18 14:46

回復 7# Kubi
  1.     Dim Msg, Style, Title, Help, Ctxt, Response, MyString
  2. Msg = "Do you want to continue ?"    ' 定義訊息。
  3. Style = vbYesNo + vbCritical + vbDefaultButton2    ' 定義按鈕。
  4. Title = "MsgBox Demonstration"    ' 定義標題。
  5. Help = "DEMO.HLP"    ' 定義說明檔。
  6. Ctxt = 1000    ' 定義內容代碼。
  7.         ' 顯示訊息。
  8. Response = MsgBox(Msg, Style, Title, Help, Ctxt)
  9. If Response = vbYes Then    ' 若使用者按下 [是]。
  10.     MyString = "Yes"    ' 產生相對回應。
  11. Else    ' 若使用者按下 [否]。
  12.     MyString = "No"    ' 產生相對回應。
  13. End If
複製代碼
這是我的程序代碼,如何修改msgbox是你的程序,並加上yes就運行,no就不作動作
作者: Kubi    時間: 2014-2-18 15:54

回復 10# marco2000


請下載摹擬檔案,試執行看看是否是版大所要的。
http://www.FunP.Net/115998
作者: marco2000    時間: 2014-2-18 16:15

http://www.FunP.Net/246277
我傳了我的檔上去
差一點點,我希望的是按了CommandButton3_Click
會彈出msgbox提示我選了多少個檔,並選yes 運行CommandButton3_Click的程式
選NO沒反應,回到UserForm1
作者: Kubi    時間: 2014-2-18 19:53

回復 12# marco2000


請於開始之 Private Sub CommandButton3_Click()

與 ThisWorkbook.Sheets(1).UsedRange.Clear

兩行中間插入底下的判斷式,試看看。

sn = UserForm1.ListBox2.ListCount
If sn = 0 Then
    MsgBox "並沒有選到檔案", vbCritical + vbOKOnly, "請重選"
    Exit Sub
Else
    If MsgBox("選了 " & sn & " 個檔案,是否確定要執行?", vbQuestion + vbYesNo, "請確認") = vbNo Then Exit Sub
End If
作者: marco2000    時間: 2014-2-18 20:05

回復  marco2000


請於開始之 Private Sub CommandButton3_Click()

與 ThisWorkbook.Sheets(1).Use ...
Kubi 發表於 2014-2-18 19:53


試了,全對
我就是想要這樣,很感激你的一整天幫助:D
作者: marco2000    時間: 2014-2-19 11:41

回復 13# Kubi
  1.     ThisWorkbook.Sheets(1).UsedRange.Clear
  2.     lb2 = UserForm1.ListBox2.ListCount
  3.    
  4.     rr = 7
  5.     For c = 1 To lb2
  6.         text1sl = UserForm1.ListBox2.List(c - 1)                        'for copy content
  7.         pp = rr + 2
  8.         kk = checkrow
  9.         arn = "C8" & ":" & "Z" & kk
  10.         ActiveWorkbook.Worksheets(text1sl).Range(arn).Copy
  11.         rrn = "B" & rr
  12.         ThisWorkbook.Sheets(1).Range(rrn).PasteSpecial
  13.         rr = rr + kk - 5
  14.         
  15.         arn2 = "A" & pp & ":" & "A" & (rr - 3)                          'for fill "A" column
  16.         ThisWorkbook.Sheets(1).Range(arn2) = ActiveWorkbook.Worksheets(text1sl).Cells(8, 3)
  17.     Next c
  18.    
複製代碼
大大你看得明嗎?
可以解釋一下嗎?
作者: Kubi    時間: 2014-2-19 20:23

回復 15# marco2000

大概是說從作用中活頁簿內,依序從清單方塊(ListBox2)內選單所有列示的工作表名稱,循環複製該工作表C∼Z欄範圍內的資料,至本活頁簿內相同工作表名稱的B欄內。

因不是原著也沒有原檔案可參照,可能會有些失準,最好是找到原著,請他來解釋較妥。
作者: marco2000    時間: 2014-2-20 09:30

回復 16# Kubi


謝謝你,我知道有什麼用,但看不明程序代碼
因為我想進行修改,但看不明白代碼,以致更改不到
作者: marco2000    時間: 2014-2-20 10:11

rr = 7                                           rr=7是什麼意思?
    For c = 1 To lb2                             這個是listbox2的檔案
        text1sl = UserForm1.ListBox2.List(c - 1)                         text1sl 是什麼
        pp = rr + 2                                         
        kk = checkrow                                   檢查橫例??
        arn = "C8" & ":" & "Z" & kk                                   arn是有什麼用?":"是用來連接?
        ActiveWorkbook.Worksheets(text1sl).Range(arn).Copy
        rrn = "B" & rr                                                                 B??
        ThisWorkbook.Sheets(1).Range(rrn).PasteSpecial
        rr = rr + kk - 5                                                   
        
        arn2 = "A" & pp & ":" & "A" & (rr - 3)                          'for fill "A" column
        ThisWorkbook.Sheets(1).Range(arn2) = ActiveWorkbook.Worksheets(text1sl).Cells(8, 3)
作者: GBKEE    時間: 2014-2-20 10:24

回復 17# marco2000
謝謝你,我知道有什麼用,但看不明程序代碼
因為我想進行修改,但看不明白代碼,以致更改不到

羅馬不是一天造成的,告訴你代碼是什麼意義,你也不見得就會進行修改
老生常談: 你不懂的程式碼可在vba視窗中的說明暸解,可複製它的範例
          多看多練習,真有疑問再發問不遲

如圖滑鼠選取文字, 後按 F1說明鍵

[attach]17537[/attach]
作者: Kubi    時間: 2014-2-20 10:50

回復 18# marco2000

版大不懂的地方都指向變數名稱上,變數名稱可隨意命名(但需避開VBA的關鍵字),
變數只是個容器,可裝載所需的資訊,並可隨時更改容器內的資訊來做有效的運用。

若要完全了解變數如何運作,除了GBKEE超級版主提出的方法之外,建議去買本 Excel VBA 基本教科書來研究吧。
作者: marco2000    時間: 2014-2-20 13:28

好,謝謝我會努力研究!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)