返回列表 上一主題 發帖

是否有人可協助開發 ?

回復 17# lpk187


    收到 , 我來玩玩看 ..............

TOP

回復 16# oliwa

寫VBA本來就是要練習,而且要多看說明,
說實在的我並不是高手,只是自己公司有用到VBA去做進銷存,所以會的其實也不多!
我們再來以下的說明
新增
        A)按下後新增一列 , 跳出視窗輸入公司代號 , 檢查是否已存在對應此代號的Sheet
        B)複製Form Sheet , 及更名為該公司代號為Sheet名
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. If Target.Address = Cells(Target.Row, "A").Address Then
  3.     If Target = "新增" Then
  4.         msg = MsgBox("是否新增一筆資料", 4)
  5.         If msg = vbNo Then End
  6.         inp = InputBox("請輸入代號", "新增")
  7.         If inp = "" Then End
  8.         For Each sh In Sheets ' 找尋所有工作表
  9.             If sh.Name = inp Then '如果有工作表名稱相同的,就結束此程序
  10.                 MsgBox "已有此代號存在,請重新輸入"
  11.                 End '結束 Sub
  12.             End If
  13.         Next
  14.         Sheets("From").Copy Before:=Sheets(2) '複製From工作表放在第2個位置
  15.         Sheets("From (2)").Name = inp '工作表各稱更改為InputBox輸入的代號
  16.         Sheets("List").Select
  17.         Rows(Target.Row).Insert '上面 For...Next 若沒找到InputBox相同代號則在"新增"的這個儲存格新增一列
  18.         Cells(Target.Row - 1, "A") = inp '新增一則後,在A欄的新增出來的儲存格其為InputBox輸入的代號
  19.     End If
  20. End If
  21. End Sub
複製代碼

TOP

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    LastRow = Sheets("List").Cells(1, "A").End(xlDown).Row
    If Target.Row < LastRow + 1 And Target.Row > 1 Then
        If Target.Address = Cells(Target.Row, "J").Address Then
            If Target.Select Then
                Id_Comp = Cells(Target.Row, "A").Value
                Id_Year = Cells(Target.Row, "D").Value
                MsgBox Id_Comp & Id_Year
            End If
        End If
    End If
End Sub

用 lpk187 的例子 + 說明後 , 試完如上的內容 , 可以達成按下某儲存格後即呼叫的動作 , 感謝 .......

TOP

回復 14# oliwa

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = .Address Then
    If Target.Select Then''''''''''這一個 IF...End If 是不必要的,只要第一個IF就可以達成你要的MsgBox的結果
       MsgBox "Hello !"
      
    End If
End If
End Sub
另Cells(Target.Row,1).Value    是可以讀取該儲存格的值,而且  .Value 是可以省略的

TOP

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Cells(Target.Row, "J").Address Then
    If Target.Select Then
       MsgBox "Hello !"
      
    End If
End If
End Sub

感謝協助 , 我改成如此的方式來運作 , 點選該該儲存格後即出現 MsgBox , 感謝 ...
用 MsgBox 改成 Call Sub , 即可達成選說即執行的動作了 ,

那請問 , 在點選後要取得該列某儲存格內容 , 是否可以用 Cells(Target.Row,1).Value ?

TOP

回復 12# lpk187


    收到 , 我試玩玩看這組 .....

TOP

本帖最後由 lpk187 於 2015-3-29 22:19 編輯

回復 11# oliwa

oliwa 不用恢心!其實大家不是不幫你,而是你自己要一步一步去訂目標然後去完成你的目標,畢竟以後你寫的程式必須你自已去維護所以就算別人寫給你的程式如果達不到你的目標那時怎麼辦?
VBA是程式碼,所以COPY來COPY去,若沒修改你所需要的再怎麼COPY也沒用,我來先開個頭來說你的目標好了

新增
        A)按下後新增一列 , 跳出視窗輸入公司代號 , 檢查是否已存在對應此代號的Sheet
        B)複製Form Sheet , 及更名為該公司代號為Sheet名


上面的"新增"你是要利用你上傳檔案的儲存格或者是利用一個按鈕來表示?兩者所寫的代碼會有些許的不同,但利用儲存格則會留下缺點(必須跳出那一格後再點選那個儲存格)
利用"儲存格"方式大約可以這麼寫,""你必須了解每一條式子的意義才行""
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  '此事件是當你選取某個儲存格後發生
If Target.Address = Cells(Target.Row, "A").Address Then'下面判斷是先在"A欄"尋找有"新增"字樣的儲存格
    If Target = "新增" Then
        msg = MsgBox("是否新增一筆資料", 4)
        If msg = vbNo Then End         '判斷若按下右按鈕後則離開程式
        inp = InputBox("請輸入代號", "新增") '跳出視窗輸入公司代號
        '以下是你要的目標代碼
        '代碼(下次再演練)
        '''''''''''''''''''''''''''''''''''''''''''''''''
    End If
End If
End Sub
以上是部份代碼,你可以利用"F9"鍵來中斷第一個"IF",再利用"F8"鍵來逐行執行,你會很容易的了解程式的運作過程
以後的代碼我們再慢慢的來討論
1

評分人數

    • GBKEE: 精品文章金錢 + 4

TOP

回復 1# oliwa


    各位說的都沒錯 , 錄製也有試過 , 但整合起來就是不能正常運作 ,
    網上有不少範例 , 但COPY來COPY去就是無法正運作 , 因為參數引用不同自然無法連貫使用 ,
    有些語法有說明 , 有些沒有 , 自然是看不懂 , 叫好再繼續看範例找解說了 .....

TOP

本帖最後由 mark15jill 於 2015-3-28 13:28 編輯

我想 可能是一開始我向樓主詢問的意思不明確
導致樓主誤會我的意思
+==================================+
"    請簡單敘述您的問題點   所需功能 動作方式
    只丟一段話 沒任何說明  很難讓人理解"
+==================================+
這段話是說 除了 "簡單敘述您的問題點 、  所需功能 動作方式"   還需要  附檔案
附檔案的意思  不是叫你丟個空程式碼檔案(不管有無內容)
然後就要人家幫你解決...
這樣就很像  今天某人機車壞掉 他拿去修理,卻沒把鑰匙給維修人員
這樣就算維修好  怎知道維修完成或沒完成?? 怎知道有沒有其他問題???
懂我意思?

今天不是說不能發問  (大字點 以免又被誤會我在嗆不能發問)
而是光丟個檔案 (或許內有說明) 沒任何程式碼  
就要人家幫你解決
說真的  如果是我 ...   你哪位???
你發問是學習 不是撿現成
像之前我發的文章
先自己嘗試、遇問題發問(需程式碼+說明)、自己才能學到

  多做多想多學習,少看少錯少迷途

  多做=多多練習,多多編寫。
  多想=想想為什麼人家程式要那樣寫,如果換成自己,又會怎寫。
  多學習=學習人家的發問並解答,學習人家的寫法

  少看=只看不做也枉然

TOP

回復 7# oliwa
自修一季卻沒有任何程式碼,這實在有問題
換做是我,自己要錄製一下,感受一下程式碼差別呢?
不然把你的想法發包出去,說不定有人就會幫忙

TOP

        靜思自在 : 為自己找藉口的人永遠不會進步。
返回列表 上一主題