返回列表 上一主題 發帖

[發問] 關於自動開啟指定位置檔案or超連結路徑的檔案

[發問] 關於自動開啟指定位置檔案or超連結路徑的檔案

本帖最後由 starry1314 於 2015-6-3 15:49 編輯

如何加入以下指令呢? 因我加進Dim wsTarget As Worksheet
底下 好像會造成按鈕行不對 所以沒辦法判斷~
或是要怎麼設定成指定路徑然後檔名,可以讀取儲存格的檔名做變數呢?

去數據表格 點選B22的超連結 開啟客戶明細
  Sheets("數據").Select
    Range("B22").Select
    Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
  1. Sub 貼上資料至_客服管理_自動判斷()
  2. '
  3. ' 貼上資料至_客服管理 巨集
  4.     Dim lSourceRow As Long, lTargetRow As Long
  5.     Dim wsTarget As Worksheet
  6.     With ActiveSheet
  7.         lSourceRow = .Buttons(Application.Caller).TopLeftCell.Row   '被點擊的該按鈕行數
  8.         If .Cells(lSourceRow, "C").Text = vbNullString Then MsgBox "日期欄無資料,無法判斷貼上月份": Exit Sub
  9.         Set wsTarget = Workbooks("客戶明細-業務專用.xlsm").Sheets(GetMonthStr(.Cells(lSourceRow, "C"))) '日期判斷要貼上的工作表
  10.         lTargetRow = wsTarget.Cells(Rows.Count, "B").End(xlUp).Row + 1  '要貼上的位置
  11.         Application.ScreenUpdating = False
  12.         .Range(.Cells(lSourceRow, "A"), .Cells(lSourceRow, "P")).Copy '複製A欄到P欄的資料
  13.         wsTarget.Cells(lTargetRow, "B").PasteSpecial Paste:=xlPasteValues '在B欄開始貼上
  14.         wsTarget.Paste Link:=True '貼上連結
  15.         Application.ScreenUpdating = True '貼上連結
  16.     End With
  17.    
  18.     With wsTarget
  19.         .Hyperlinks.Add Anchor:=.Cells(lTargetRow, "A"), _
  20.                         Address:=ThisWorkbook.FullName, _
  21.                         SubAddress:=ThisWorkbook.ActiveSheet.Name & "!" & Rows(lSourceRow).Address, _
  22.                      TextToDisplay:=.Cells(lTargetRow, "a").Text

  23.     End With
  24. End Sub
複製代碼

本帖最後由 luhpro 於 2015-6-9 01:13 編輯
回復  luhpro
    這就不了解了...因我當初貼的那段是可正常運作~
後來將表格統一在一個,就沒有使用 ...
starry1314 發表於 2015-6-8 22:57

那要看原檔案內容才能知道了.


另想請問inDate是?
starry1314 發表於 2015-6-8 22:57

請看 15 #
Function GetMonthStr(inDate As Date) As String
因為不能得知你呼叫 Function 時用的是什麼變數名稱,
自然直接套用 Function 上的變數名來說明.

TOP

回復 16# luhpro


    這就不了解了...因我當初貼的那段是可正常運作~
後來將表格統一在一個,就沒有使用這段指令了 ,
改使用像你講的
若要引用你 15# 所述的 Function,
那麼該行大約應該長成底下這樣 :
Set wsTarget = Workbooks("客戶明細-客服專用.xlsm").Sheets(GetMonthStr(inDate))
使用為
Set wsTarget = Workbooks("客戶明細-客服專用.xlsm").Sheets("客戶明細")
另想請問inDate是?

TOP

本帖最後由 luhpro 於 2015-6-8 22:08 編輯
回復  luhpro
    另外,這一行應該是不對的啊:
Set wsTarget = Workbooks("客戶明細-客服專用.xlsm" ...
starry1314 發表於 2015-6-7 11:09

還是不對的啊.

首先,
你該行的括號也沒有成對,
這就已經先會發生語法錯誤而導致整個 Sub 應該都執行不下去了.

若要引用你 15# 所述的 Function,
那麼該行大約應該長成底下這樣 :
Set wsTarget = Workbooks("客戶明細-客服專用.xlsm").Sheets(GetMonthStr(inDate))
而不應該有 Cells 這個東東.

更遑論你那個 ("一月") 是已經釘死為 "一月" 的,
與 GetMonthStr 這個 Function 怎麼也不該牽在一起.

我剛剛再次查了一下 Excel 2003 中關於 Range 的說明, 確認它的敘述 :
Cells 屬性
可用 Cells(row, column) 傳回單個儲存格,其中 row 為列索引,column 為欄索引。

難道更新版的 Excel 中,
Cells 有其它新的語法嗎?

TOP

回復 13# luhpro


    另外,這一行應該是不對的啊:
Set wsTarget = Workbooks("客戶明細-客服專用.xlsm").Sheets(.cells("一月")
Cells() 的括弧中間只能是 列號,行號 而不能是字串,
且你該行的括號也沒有成對.

會不會是 因前面是有用日期判斷要使用哪個月份sheets 所已cells才可用
  1. Function GetMonthStr(inDate As Date) As String
  2.     Select Case Month(inDate)
  3.         Case 1
  4.             GetMonthStr = "一月"
  5.         Case 2
  6.             GetMonthStr = "二月"
  7.         Case 3
  8.             GetMonthStr = "三月"
  9.         Case 4
  10.             GetMonthStr = "四月"
  11.         Case 5
  12.             GetMonthStr = "五月"
  13.         Case 6
  14.             GetMonthStr = "六月"
  15.         Case 7
  16.             GetMonthStr = "七月"
  17.         Case 8
  18.             GetMonthStr = "八月"
  19.         Case 9
  20.             GetMonthStr = "九月"
  21.         Case 10
  22.             GetMonthStr = "十月"
  23.         Case 11
  24.             GetMonthStr = "十一月"
  25.         Case 12
  26.             GetMonthStr = "十二月"
  27.     End Select
  28. End Function
複製代碼

TOP

回復 13# luhpro


    謝謝指導~我再研究一下,

TOP

本帖最後由 luhpro 於 2015-6-7 09:28 編輯
回復  luhpro
...
另想請問一開始給我的
   sPath = ThisWorkbook.Path
ChDrive sPath
ChDir sPath
作用是? 因用監看式看不懂,嘗試把他拿掉還是正常運作
...
starry1314 發表於 2015-6-6 01:25

這是對你 1# 所提 :
要怎麼設定成指定路徑然後檔名,可以讀取儲存格的檔名做變數呢?
猜測你是要先設定好目前工作目錄,
把所有會用到的檔案都放在該目錄下,
就不用在開啟檔案時還要另外指定檔案所在的目錄,
只要給檔名就可以使用該檔案了.

另外,這一行應該是不對的啊:
Set wsTarget = Workbooks("客戶明細-客服專用.xlsm").Sheets(.cells("一月")
Cells() 的括弧中間只能是 列號,行號 而不能是字串,
且你該行的括號也沒有成對.

Paste 函數執行時應該可以不用先把標的工作簿Activate,
也不用把標的工作表及標的儲存格 Select,
直接以 With wsTarget 與 End With包住,
再於其中用 . 代換即可.
或是用 wsTarget.cells... 亦可.

因為不能確認你語法有錯誤的這一行 :
Set wsTarget = Workbooks("客戶明細-客服專用.xlsm").Sheets(.cells("一月")
標的是否為可變動的,
所以暫時不能對那些指令做優化.


回復  luhpro
    回復  luhpro
請問關於這是用按鈕做,那如果是使用圖案呢?
無法取得.Buttons屬 ...
starry1314 發表於 2015-6-6 17:38

針對圖案?
這個我也不會喔,抱歉.

TOP

回復 10# starry1314


    除了 Set wsTarget = Workbooks("客戶明細-客服專用.xlsm").Sheets(.cells("一月") 這列
其他的若拿掉可以正常工作拿掉也無彷!
.Activate是指定作用中的工作簿、工作表,也就是說你現在在這裡工作。在程序中除非你指定後有特別作用,否則沒有什麼意義!
.Select是指定去選擇哪一個工作表或儲存格,然後在這工作。在程序中除非你指定後有特別作用,否則沒有什麼意義!

TOP

回復 8# luhpro


    回復 8# luhpro

請問關於
  1.          'lSourceRow = Selection(1).Row   '被點擊的該按鈕行數
  2.          lSourceRow = .Buttons(Application.Caller).TopLeftCell.Row
複製代碼
這是用按鈕做,那如果是使用圖案呢?
無法取得.Buttons屬性

TOP

本帖最後由 starry1314 於 2015-6-6 01:36 編輯

回復 8# luhpro
真是太感謝幫忙了~解決掉我好幾個困擾的問題
已正常運作 ,但紅字部分有點冗長,可幫忙做優化嗎?
因沒加Windows("客戶明細-客服專用.xlsm").Activate
        Sheets("一月").Select
會在原本頁面做貼上資料的動作

另想請問一開始給我的
   sPath = ThisWorkbook.Path
ChDrive sPath
ChDir sPath
作用是? 因用監看式看不懂,嘗試把他拿掉還是正常運作

Sub 貼上資料()
'

    Dim lSourceRow As Long, lTargetRow As Long
    Dim wsTarget As Worksheet
    With ActiveSheet
        lSourceRow = Selection(1).Row  '被點擊的該按鈕行數
       ' If .Cells(lSourceRow, "C").Text = vbNullString Then MsgBox "日期欄無資料,無法判斷貼上月份": Exit Sub
        'Set wsTarget = Workbooks("客戶明細-業務專用.xlsm").Sheets(GetMonthStr(.Cells(lSourceRow, "C"))) '日期判斷要貼上的工作表
        Set wsTarget = Workbooks("客戶明細-客服專用.xlsm").Sheets(.cells("一月")
        Windows("客戶明細-客服專用.xlsm").Activate
        Sheets("一月").Select

        lTargetRow = wsTarget.Cells(Rows.Count, "B").End(xlUp).Row + 1 '要貼上的位置
        Application.ScreenUpdating = False
        .Range(.Cells(lSourceRow, "A"), .Cells(lSourceRow, "AF")).Copy '複製A欄到P欄的資料
        wsTarget.Cells(lTargetRow, "B").PasteSpecial Paste:=xlPasteValues '在B欄開始貼上
        wsTarget.Paste Link:=True '貼上連結
        Application.ScreenUpdating = True '貼上連結
    End With
   
    With wsTarget
        .Hyperlinks.Add Anchor:=.Cells(lTargetRow, "A"), _
                        Address:=ThisWorkbook.FullName, _
                        SubAddress:=ThisWorkbook.ActiveSheet.Name & "!" & Rows(lSourceRow).Address, _
                     TextToDisplay:=.Cells(lTargetRow, "a").Text

    End With
End Sub

TOP

        靜思自在 : 【行善要及時】行善要及時,功德要持續。如燒開水一般,未燒開之前千萬不要停熄火候,否則重來就太費事了。
返回列表 上一主題