返回列表 上一主題 發帖

[發問] 關於自動貼上連結至另一個檔案並自動插入超連結

本帖最後由 lpk187 於 2015-5-6 09:30 編輯

回復 20# starry1314
  1. Sub 貼上資料至_業務管理TEST自動往下貼一行()
  2. '
  3. ' 貼上資料至_業務管理 巨集

  4.     'Range("A3:P3").Copy
  5.     sht = ActiveSheet.Name
  6.     arr = Range("A3:P3")
  7.     本檔案的路徑 = ThisWorkbook.Path & "\"
  8.     本檔案的檔名 = ThisWorkbook.Name
  9.    
  10.     Workbooks.Open ("複製的路徑" & "\" & "客戶明細-業務專用.xlsm") '這裡的"複製的路徑"是要可以開"客戶明細-業務專用.xlsm"的路徑
  11.     Windows("客戶明細-業務專用.xlsm").Activate
  12.     AA = Workbooks("客戶明細-業務專用.xlsm").Sheets("五月").Cells(Rows.Count, "B").End(xlUp).Address
  13.     EndRow = Workbooks("客戶明細-業務專用.xlsm").Sheets("五月").Cells(Rows.Count, "B").End(xlUp).Row + 1 '所有使用中的列數+1
  14.     'Cells(EndRow, "B").PasteSpecial Paste:=xlPasteValues '原本的程序
  15.     Cells(EndRow, "B").Resize(1, UBound(arr, 2)) = Application.Transpose(Application.Transpose(arr)) '目前使用中的分頁,的最下方空白列貼上值
  16.     'ActiveSheet.Paste Link:=True
  17.     Windows("客戶明細-業務專用.xlsm").Activate
  18.     'ActiveSheet.Hyperlinks.Add Anchor:=Cells(EndRow, "B"), Address:=ThisWorkbook.Name, SubAddress:=sht'原本的程序
  19.     Windows("客戶明細-業務專用.xlsm").Hyperlinks.Add Anchor:=Cells(EndRow, "B"), Address:=本檔案的路徑 & ThisWorkbook.Name, SubAddress:=sht變更後的 '這裡的本檔案的路徑則是這個檔案所在的路徑
  20.     Workbooks("客戶明細-業務專用.xlsm").Close True

  21. End Sub
複製代碼
上面是我有修改的程序,其中有解釋路徑

TOP

回復 21# lpk187


    不好意思~
Windows("客戶明細-業務專用.xlsm").Hyperlinks.Add Anchor:=Cells(EndRow, "B"), Address:=本檔案的路徑 & ThisWorkbook.Name, SubAddress:=sht變更後的 '這裡的本檔案的路徑則是這個檔案所在的路徑

此欄一直跑出偵錯,但在前一個尚未修正過的程式 這樣的寫法是正常使用呢

TOP

回復 22# starry1314


    不好意思,上班中,不能即時回應,也沒好好的檢查程序是否錯誤!抱歉
  1. Sub 貼上資料至_業務管理TEST自動往下貼一行()
  2. '
  3. ' 貼上資料至_業務管理 巨集

  4.     'Range("A3:P3").Copy
  5.     sht = ActiveSheet.Name
  6.     arr = Range("A3:P3")
  7.     本檔案的路徑 = ThisWorkbook.Path & "\"
  8.     本檔案的檔名 = ThisWorkbook.Name
  9.     日期 = Format([B3], "M""月")
  10.     Workbooks.Open (ThisWorkbook.Path & "\" & "客戶明細-業務專用.xlsm") '這裡的"複製的路徑"是要可以開"客戶明細-業務專用.xlsm"的路徑
  11.     Windows("客戶明細-業務專用.xlsm").Activate
  12.    
  13.     EndRow = Workbooks("客戶明細-業務專用.xlsm").Sheets("五月").Cells(Rows.Count, "B").End(xlUp).Row + 1 '所有使用中的列數+1
  14.     'Cells(EndRow, "B").PasteSpecial Paste:=xlPasteValues '原本的程序
  15.     Cells(EndRow, "B").Resize(1, UBound(arr, 2)) = Application.Transpose(Application.Transpose(arr)) '目前使用中的分頁,的最下方空白列貼上值
  16.     'ActiveSheet.Paste Link:=True
  17.     Workbooks("客戶明細-業務專用.xlsm").Activate
  18.     'ActiveSheet.Hyperlinks.Add Anchor:=Cells(EndRow, "B"), Address:=ThisWorkbook.Name, SubAddress:=sht'原本的程序
  19.    
  20.     Workbooks("客戶明細-業務專用.xlsm").Sheets("五月").Hyperlinks.Add Anchor:=Cells(EndRow, "B"), Address:=本檔案的檔名, SubAddress:=sht '變更後的 '這裡的本檔案的路徑則是這個檔案所在的路徑
  21.     Workbooks("客戶明細-業務專用.xlsm").Close True

  22. End Sub
複製代碼

TOP

回復 23# lpk187

SubAddress:=sht & "!Q2" 再修改     

TOP

不會啦~是我才不好意思!一直麻煩你
先慢慢測試再理解囉

TOP

回復 19# starry1314

Q1.1.Sheets("五月")<請問關於妳所說的變數
假如在個別客戶明細(Q3)做一個清單 一~十二月,那有什麼指令可以讓"五月" 去讀取那個位置變成動態呢?  cells(Q3) 這樣嗎?

回答上面這問題:
A1.之前我有做一個類似的檔案,但因為考慮使用時間的問題(不用每年的一開始就修改程式或更改檔案名稱以及很多相關的問題),所以我改用資料庫的做法,把像你月份的工作表改成只有用一個資料庫的工作表
然後再做一個可以查詢的工作表來查詢相關的目的,當然我在資料庫有放所謂年度月份的欄位,以利查詢用。
所以像Sheets("五月")做變數,則是要牽涉到使用的目的才能下方法,而我做的巨集是用工作表事件來代替你的按鈕,而且把月份的數字改成阿拉伯數字,這樣則可以用你日期欄來抓取月份來做變數例如
日期 = Format([B3], "M""月")

A2.若在Q3做清單這也是一個好方法,其變數直指它就可以如:xxx=Range("Q3") 或xxx=[Q3]<<這裡要用中括號(你檔案中的第一個巨集用小括號就不對了),又或是xxx=Cells(3,"Q"),"不是cells(Q3)"

TOP

Workbooks("客戶明細-業務專用.xlsm").Sheets("五月").Hyperlinks.Add
修改過
Workbooks("客戶明細-業務專用.xlsm").Sheets([Q3]).Hyperlinks.Add
這邊要如何轉成變數呢? 上方都換過但還是無法執行~
還是說日期 = Format([B3], "M""月")
我只要再sheets(日期) 這樣嗎?

TOP

回復 10# lpk187


    請問 Windows("目前所在檔名.xlsm").Activate
可更改為
Windows("ThisWorkbook.Name").Activate 嗎?

TOP

回復 27# starry1314
可試試看
  1. Sub 貼上資料至_業務管理TEST自動往下貼一行()
  2. '
  3. ' 貼上資料至_業務管理 巨集
  4. '
  5.     Dim lSourceRow As Long, lTargetRow As Long
  6.     Dim wsTarget As Worksheet
  7.    
  8.     With ActiveSheet
  9.         lSourceRow = .Buttons(Application.Caller).TopLeftCell.Row   '被點擊的該按鈕行數
  10.         Set wsTarget = Workbooks("客戶明細-業務專用.xlsm").Sheets(GetMonthStr(.Cells(lSourceRow, "B"))) '日期判斷要貼上的工作表
  11.         lTargetRow = wsTarget.Cells(Rows.Count, "B").End(xlUp).Row + 1  '要貼上的位置
  12.         .Range(.Cells(lSourceRow, "A"), .Cells(lSourceRow, "P")).Copy wsTarget.Cells(lTargetRow, "B") '複製貼上該行資料
  13.     End With
  14.    
  15.     'Q欄設定超連結到本檔案
  16.     With wsTarget
  17.         .Hyperlinks.Add Anchor:=.Cells(lTargetRow, "Q"), _
  18.                         Address:=ThisWorkbook.FullName, _
  19.                         SubAddress:=ThisWorkbook.ActiveSheet.Name & "!" & Rows(lSourceRow).Address, _
  20.                         TextToDisplay:=.Cells(lTargetRow, "Q").Text
  21.     End With
  22. End Sub

  23. '工作表用中文字要自己寫function轉,如果是1月、2月...可用 Format(日期,"m月")轉換較方便
  24. Function GetMonthStr(inDate As Date) As String
  25.     Select Case Month(inDate)
  26.         Case 1
  27.             GetMonthStr = "一月"
  28.         Case 2
  29.             GetMonthStr = "二月"
  30.         Case 3
  31.             GetMonthStr = "三月"
  32.         Case 4
  33.             GetMonthStr = "四月"
  34.         Case 5
  35.             GetMonthStr = "五月"
  36.         Case 6
  37.             GetMonthStr = "六月"
  38.         Case 7
  39.             GetMonthStr = "七月"
  40.         Case 8
  41.             GetMonthStr = "八月"
  42.         Case 9
  43.             GetMonthStr = "九月"
  44.         Case 10
  45.             GetMonthStr = "十月"
  46.         Case 11
  47.             GetMonthStr = "十一月"
  48.         Case 12
  49.             GetMonthStr = "十二月"
  50.     End Select
  51. End Function
複製代碼
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。

TOP

本帖最後由 starry1314 於 2015-5-6 14:39 編輯

回復 29# stillfish00


  不好意思~使用結果沒有反應易沒有跳出偵錯.....
另想問一下
lSourceRow = .Buttons(Application.Caller).TopLeftCell.Row   '被點擊的該按鈕行數
是滑鼠點擊的所在位置的行數嗎?
還是按鈕所在的行數?

TOP

        靜思自在 : 每天無所事事,是人生的消費者,積極、有用才是人生的創造者。
返回列表 上一主題