2017-01-20 8 views
-2

レコード(この場合は従業員)を循環する2つのボタンがあります。アクセス:次のレコードに移動すると、空のレコードが作成されます

ボタンの1つはです。前のレコードとは、最初のエモロイまですべてのエモローヤをナビゲートします。最初の従業員に達した後、ボタンは何もしません。

しかし、* next record *ボタンの場合、何らかの理由で最後に目に見える雇用に行った後、もう一度押すと新しいまたは** blank **レコードになります。

バグを修正するかどうかはわからないが、

ヘルプは非常に感謝感謝です!

Sub WinLossSplit() 
Dim ws As Worksheet 
Application.DisplayAlerts = False 
Application.ScreenUpdating = False 

For Each ws In Worksheets 
If ws.Name <> "Sheet1" And ws.Name <> "Sheet2" Then 
    If Application.WorksheetFunction.CountA(ws.Range("A:A")) > 0 Then 
     ws.Range("A:A").TextToColumns Destination:=ws.Range("A:B"), DataType:=xlDelimited, _ 
     TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _ 
     Semicolon:=False, Comma:=True, Space:=False, Other:=True, OtherChar _ 
     :=True, FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True 
    End If 
    End If 

Next ws 
Application.DisplayAlerts = True 
Application.ScreenUpdating = True 
MsgBox ("done") 
End Sub 

Sub hello() 

Dim a, i As Long, w(), k(), n As Long 
Dim dic As Object, ws As Worksheet, s As String 
For Each ws In Worksheets 
dic.comparemode = vbTextCompare 
'With Sheets("Sheet1") 
    a = ws.Range("a1:b" & ws.Range("a" & Rows.Count).End(xlUp).Row) 
'End With 

ReDim w(1 To UBound(a, 1), 1 To 2) 
Set dic = CreateObject("scripting.dictionary") 
For i = 1 To UBound(a, 1) 
    If Not IsEmpty(a(i, 1)) Then 
     ' If Not dic.exists(a(i, 1)) Then 
     ' n = n + 1 
     ' w(n, 1) = a(i, 1): w(n, 2) = a(i, 2) 
      ' dic.Add a(i, 1), Array(n, 2) 
     'Else 
      k = dic.Item(a(i, 1)) 
      w(k(0), 2) = w(k(0), 2) & "," & a(i, 2) 
      dic.Item(a(i, 1)) = k 
     'End If 
    End If 
Next 
On Error Resume Next 
'Set ws = Sheets("FinalReport") 
On Error GoTo 0 
If ws Is Nothing Then 
' Set ws = Worksheets.Add: ws.Name = "FinalReport" 
End If 
With ws.Range("a1") 
    '.Resize(, 2).Value = Array("Array", "Datetime period") 
    .Resize(, 1).Value = Array("Array", "Datetime period") 
    For i = 1 To n 
     If Len(w(i, 2)) > 1024 Then 
      s = w(i, 2) 
      .Offset(i).Value = w(i, 1) 
      .Offset(i, 1).Value = s 
     Else 
      .Offset(i).Value = w(i, 1) 
      .Offset(i, 1).Value = w(i, 2) 
     End If 
    Next 
    ' puts in separate columns rather than string with commas 
    .Offset(1, 1).Resize(n).TextToColumns _ 
    Destination:=.Offset(1, 1), DataType:=xlDelimited, Comma:=True 
End With 
Set dic = Nothing: Erase a 

Next ws 

End Sub 

答えて

0

これは設計上の問題ではありません。

これが気に入らない場合は、フォームのプロパティAllowAdditionsをFalseに設定します。

+0

ありがとう、とにかくVBAなしでこれを行うにはありますか?アクセスで既に使用されているマクロ式ビルダー(コーディングブロック)のI.E? – Urvil

+0

私はそう思いますが、わかりません。私はマクロをしません。 – Gustav

+0

ありがとう!マクロをvbaに変換し、コード行を追加しました。これは機能します。 – Urvil

関連する問題