返回列表 上一主題 發帖

[發問] 請問前輩們 如何讓VBA 依據欄位裡的名稱去搜索到同名稱的工作表

[發問] 請問前輩們 如何讓VBA 依據欄位裡的名稱去搜索到同名稱的工作表

請問前輩們 如何讓VBA 依據欄位裡的名稱去搜索到同名稱的工作表
我做了一個銷貨系統  在"銷貨單"工作表上完成填寫後 按下指定的巨集
就會自動導入"銷貨清單"中
問題來了 因為客戶產品都不相同 所以須要把各客戶的銷貨清單分開
例如分成銷貨清單A為"A公司"工作表名稱和銷貨清單B為"B公司"工作表名稱
在A1欄位 設置了資料驗證的清單 可供選擇A公司、B公司
如何讓VBA 依據A1欄位的名稱 去搜尋到和A1欄位同名稱的工作表呢??
指令該如寫呢??
拜託前輩們指導指導我 非常感謝

回復 2# lpk187
忘了和前輩說 你所看到的1~12月份的格式 就是之前的人留下來的格式
但是 是一間客戶 一個EXCEL檔 但我就是不想每次都要開一堆檔案 才會想把它整合成一個的
客戶雖然不少間 但實際有1~12月分都有叫貨紀錄的 約莫10間左右
請前輩多多指教

TOP

回復 2# lpk187
前輩 不好意思 我不能私訊你 所以在這裡和你聯絡
關於前輩提的複雜性 我自己有意識到 但我不是學這出身的
所以只能硬著頭皮試看看
至於年度問題 我是打算用另存檔案的方式來做區隔
例如104年12月結束後 我將檔案另存成105年度 然後錄製一個年度復歸的按鈕
將各公司的銷貨清單刪除成空白 再重新開始105年度
這樣可行嗎??
不知是否 可和前輩私下聯絡 想多知道 前輩說的資料庫的方式 是怎麼樣的一個系統
謝謝前輩!!

TOP

回復 11# 准提部林

謝謝版大 我會去看的 感謝版大

TOP

回復 10# lpk187
果然跟前輩說的一樣 換到上一行就正確了:victory:

TOP

回復 8# 順勢而為


Sub 導入()
Dim xS As Worksheet 

寫VBA請養成〔變數〕宣告!

進VBE說明檔,了解一下〔區域變數〕〔模組變數〕〔全域變數〕的宣告方式及功用,
對以後寫複雜程式絕對有用∼∼

TOP

回復 8# 順勢而為

你把If xS Is Nothing Then MsgBox "工作表不存在": Exit Sub把這列放到
On Error GoTo 0 上面看看

TOP

回復 7# lpk187

真的很感謝您~

TOP

回復 6# 准提部林

准提部林版大: 謝謝您的寶貴提醒 ,的確有這一點小小的狀況 。
但是版大 If xS Is Nothing Then MsgBox "工作表不存在": Exit Sub
這行貼上去後 我去做一個沒有工作表的執行
指令只跑到   If xS Is Nothing Then 就出現偵錯了
而不會繼續跑 MsgBox "工作表不存在": Exit Sub 這段錯誤提醒
請問我是哪個部分錯了??
  1. Sub 導入()
  2. Application.ScreenUpdating = False
  3. With Sheets("銷貨單")

  4. If .[B12] = "" Then MsgBox "請輸入資料後再按按鈕 ": Exit Sub
  5.     shN = .[O14]
  6.     Ro = .[B27].End(xlUp).Row
  7.     arr = .Range("C12:I" & Ro)
  8.     日期 = .[h7]
  9. End With
  10. On Error Resume Next '表示當一個執行階段錯誤產生時,程式控制立刻到發生錯誤陳述式接下去的陳述式
  11. Set xS = Sheets(shN) '設定 xS 為尋找的工作表 如果找不到會產生錯誤,所以要有上一句和下一句
  12. On Error GoTo 0 '停止現在程序�堨籉韝w啟動的錯誤處理程式

  13. If xS Is Nothing Then MsgBox "工作表不存在": Exit Sub

  14. With xS
  15.     xSro = .Cells(Rows.Count, 1).End(xlUp).Row + 1
  16.     .Cells(xSro, "B").Resize(UBound(arr, 1), UBound(arr, 2)) = arr
  17.     .Range("A" & xSro & ":A" & xSro + UBound(arr, 1) - 1) = 日期
  18. End With
  19. Sheets("銷貨單").Select
  20. Range("B12:B26,D12:D26,H7:H8,H5").ClearContents
  21. Range("C4") = "S" & Format(Right(Range("C4"), 4) + 1, "0000")
  22. Range("O14").Select
  23. Application.ScreenUpdating = True
  24. End Sub
複製代碼

TOP

回復 6# 准提部林

對吼!忘記加了,感謝准大提醒!謝謝

TOP

        靜思自在 : 發脾氣是短暫的發瘋。
返回列表 上一主題