回覆列表
  • 1 # pietr49411

    問題不易明白, 唯有假設:在A列任何一格, 假設是A1, 輸入 3×5×4A1的內容自動變成 =3*5*4並顯示結果是 60程式碼:Private Sub Worksheet_Change(ByVal Target As Range)On Error GoTo ABCIf Target.Cells.Count > 1 Or Target.Column 1 Then Exit SubIf InStr(Target, "×") = 0 Then Exit SubTarget.Value = "=" & Replace(Target.Value, "×", "*")ABC:End Sub方法:右擊(該工作表)工作表標籤選 檢視程式程式碼(V)對話方塊左上方的下拉 選 Worksheet右上方的下拉 選 Change將程式碼放在:Private Sub Worksheet_Change(ByVal Target As Range)[程式碼放在這裡]End Sub其實需執行的程式碼只有一行Target.Value = "=" & Replace(Target.Value, "×", "*")其餘程式碼都是用來防錯在A1輸入資料 2*3, 然後用VBA將A1的資料(在原格)改變成 2×3是會做成迴圈錯誤, 要有相當高的VBA技巧及經驗, 才可以有機會克服, 有很多情況可能會無法解決。觀乎樓主的提問及補充, 應無能力在現階段應用。除非你有相當高經驗及造詣, 否則不要問在A1輸入xx, A1格的內容要自動變成yy 此類問題(自動-取代 除外)。你只可問 A1輸入 xx, B1的內容變成yy回到你的問題, 請將問題改成 在A1 直接輸入 2×3(不要輸入 2*3), B1 自動計算成 6程式碼是:Private Sub Worksheet_Change(ByVal Target As Range)On Error GoTo ABCIf Target.Cells.Count > 1 Or Target.Column 1 Then Exit SubIf InStr(Target, "×") = 0 ThenTarget.Offset(0, 1).ClearContentsElseTarget.Offset(0, 1) = Evaluate("=" & Replace(Target.Value, "×", "*"))End IfABC:End Sub看到樓主的迴應, 及表達能力, 非常高興及放心。但有一點我一定要補充, 否則執行Worksheet_Change()時, 會相當不穩定及執行錯誤因此, 在程式碼中是有必要加上:On Error GoTo ABC→作用是如有出錯, 便結束執行宏If Target.Cells.Count > 1 Then Exit Sub→作用是如工作中的單元格超過一格, 便結束執行宏(否則整個工作表都無法做下拉複製的工作)If Target.Column 1 Then Exit Sub→作用是隻在A列輸入資料, 才會執行宏當然最好再加上:If InStr(Target, "*") = 0 ThenTarget.Offset(0, 1).ClearContents作用是如A列某一單元格清除內容或其它, B列對應的單元格的內容亦會被自動清除。 當然程式碼的內容尚有可能需新增或減少, 最終是要根據工作表的實際情況及測試結果而定

  • 2 # 藍風24

    進入VBA視窗,雙擊工程資源管理器上所在頁,加入如下程式碼:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim rownumber As Long

    On Error Resume Next

    Application.ScreenUpdating = False

    For rownumber = 3 To Cells(70000, 3).End(xlUp).Row

    If Cells(rownumber, 3) "" Then Cells(rownumber, 1) = rownumber - 2

    Next

    Application.ScreenUpdating = True

    End Sub

  • 中秋節和大豐收的關聯?
  • 精神分裂症陰性症狀是什麼?