私はイントラネットからシートをダウンロードし、この宛先シートにソースシートからのデータを入力するために、ボタン付きのフォームを使用しています。この部分は動作します:データが入力され、フォームのアンロード、スクリプトの停止、アクティブなスクリーンとしての宛先シートがあります。
問題は次のとおりです。セルを選択することはできますが、Excelでは機能を使用できず、クイックアクセスリボンの[ファイル]、[ホーム]、[保存]などのボタンを押すことはできません。 ESC
を押すことは役に立ちません。 Excelをフリーズする唯一のことは、ランダムなセルのどこかでマウスの右ボタンを押すことです。それは 'unlocks' Excelと私はファイルメニューに行くことができます。私はどこを見るか分からない。私はそれが何か小さいと思うが、それが何であるか理解できない。コード実行後にExcelのメニューバーがフリーズします。右マウスをクリックしてフリーズ解除する
これはコードある(ジャンプは単一または複数の項目のために使用され、それが1つの項目のためなら、私はループをスキップ多分これのためのより良いオプションがあります。。?):私は
Private Sub genbutton_Click()
On Error GoTo 0
Dim startsheet As String
startsheet = ActiveSheet.Name
roww = ActiveCell.Row
Set Source = ActiveWorkbook.ActiveSheet
'search for column in source sheet
kolommaint = kolomnaam2("Maintenance Plan")
kolomfloc = kolomnaam2("Functional Location")
kolomdescrip = kolomnaam2("Maintenance item description")
kolomequip = kolomnaam2("Equipment")
'find last row on data source page
With ActiveSheet
lastrow = .Cells(.Rows.Count, kolommaint).End(xlUp).Row
End With
Set destinationsheet = Workbooks.Open("http:// sheet on intranet.xlsm")
'find first data row on destination sheet
Dim FindString As String
Dim Rng As Range
FindString = "Action"
With destinationsheet.Sheets("Data input").Range("A:A")
Set Rng = .Find(What:=FindString, _
After:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Not Rng Is Nothing Then
Application.Goto Rng, True
datarij = ActiveCell.Row + 1
End If
End With
'make a jump to avoid loop if only 1 item is needed
If callsingle.Value = True Then
i = roww
If Source.Range(kolommaint & i).Value = "" Then
GoTo verdergaan
End If
GoTo jump
End If
For i = eerstedatarij To lastrow
jump:
'skip row if empty
If Source.Rows(i).Hidden = True Then
GoTo verdergaan
End If
destinationsheet.Sheets("Data input").Range("A" & datarij).Value = "Release Call"
destinationsheet.Sheets("Data input").Range("B" & datarij).Value = Source.Range(kolommaint & i).Value
destinationsheet.Sheets("Data input").Range("C" & datarij).Value = "PM"
destinationsheet.Sheets("Data input").Range("E" & datarij).Value = Source.Range(kolomdescrip & i).Value
destinationsheet.Sheets("Data input").Range("F" & datarij).Value = Source.Range(kolomdescrip & i).Value
destinationsheet.Sheets("Data input").Range("G" & datarij).Value = Source.Range(kolomfloc & i).Value
destinationsheet.Sheets("Data input").Range("H" & datarij).Value = Source.Range(kolomequip & i).Value
datarij = datarij + 1
'make jump if single item is used
If callsingle.Value = True Then
GoTo jump2
End If
verdergaan:
Next i
jump2:
destinationsheet.Sheets("Data input").Range("A13").Select
Set Source = Nothing
Set destinationsheet= Nothing
Unload Me
End Sub
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10
Public Sub RightDown()
mouse_event MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
End Sub
Forループに「ジャンプ」することはできません。エラー処理以外のGoToの使用を避けてください。 Forループを停止したい場合は、 "Exit For"を使用してください。 –
私はコードコメントで型を作りました。そのループに入っていないために、より多くのジャンプ。コメントのおかげで、私はExit Forを試してみるつもりです。私は多くの機能のためにジャンプを使用しますが、凍った画面では問題に遭遇することはありません。 – bob