分类目录归档:Programming

VBA – 一段 Excel 自动汇总代码

将此代码保存到模板文件里,将待汇总文件全部放入一个文件夹中。

此代码将从模板文件的第3个Sheet开始,根据Sheet名字,汇总目标文件夹中所有.xls文件的对应Sheet。

Sub 按文件夹汇总()
    ' 定义变量
    Dim folderDlg, folder$, file$
    Dim ignoreFilter As VbMsgBoxResult, deleteBlankRow As VbMsgBoxResult
    Dim sourceWB As Workbook, sourceWS As Worksheet
    Dim targetWS As Worksheet
    
    ' 选择文件夹
    Set folderDlg = Application.FileDialog(msoFileDialogFolderPicker)
    With folderDlg
        .Title = "请选择文件夹"
        .InitialFileName = ThisWorkbook.Path
        .AllowMultiSelect = False
    End With
    If folderDlg.Show Then
        folder = folderDlg.SelectedItems(1) & "\"
    Else
        MsgBox ("未选择文件夹,汇总已取消!")
        Exit Sub
    End If
    
    ' 自定义汇总设置
    ignoreFilter = MsgBox("是否取消筛选(复制隐藏单元格)?", vbYesNo, "筛选")
    
    ' 遍历文件夹下所有文件
    file = Dir(folder & "*.xls")
    Do While file <> ""
        ' 不打开同名文件
        If file <> ThisWorkbook.Name Then
            Set sourceWB = CreateObject(folder & file)
            ' 汇总每个子表格内容
            For i = 3 To ThisWorkbook.Worksheets.Count
                Set targetWS = ThisWorkbook.Sheets(i)
                Set sourceWS = sourceWB.Sheets(targetWS.Name)
                If sourceWS.UsedRange.Rows.Count > 6 Then
                    ' 取消筛选判断
                    If ignoreFilter = vbYes Then
                        sourceWS.AutoFilterMode = False
                        If sourceWS.FilterMode Then
                            sourceWS.ShowAllData
                        End If
                    End If
                    sourceWS.Rows(6 & ":" & sourceWS.UsedRange.Rows.Count).Copy
                    targetWS.Range("A" & targetWS.UsedRange.Rows.Count + 1).PasteSpecial (xlPasteValues)
                End If
            Next i
            Application.CutCopyMode = False
            sourceWB.Close (False)
        End If
        file = Dir
    Loop
    
    ' 删除空白行
    deleteBlankRow = MsgBox("汇总完成!是否删除空白行(建议删除)?", vbYesNo, "删除空白行")
    If deleteBlankRow = vbYes Then
        For s = 3 To ThisWorkbook.Worksheets.Count
            Set targetWS = ThisWorkbook.Sheets(s)
            For r = targetWS.UsedRange.Rows.Count To 6 Step -1
                If WorksheetFunction.CountA(targetWS.Rows(r)) = 0 Then
                    targetWS.Rows(r).Delete
                End If
            Next r
        Next s
    End If
End Sub

VS2010 – 根据DLL文件重建LIB文件

一般要在项目中调用第三方提供的库时,需要链接至第三方提供的DLL文件调用里面的函数,但是一般情况下我们能获取的只有头文件(.h)和动态链接库文件(.dll),而无法得到库文件(.lib),这对我们引用DLL造成很大不便:

如果想要调用DLL中的函数,单靠头文件(.h)和动态链接库文件(.dll)需要使用LoadLibrary()和FreeLibrary()加载DLL文件,并对每个函数都进行类型定义,并用GetProcAddress()对每个函数进行一一映射,在DLL中函数数量极多时,会明显增加工作量。

经过一番搜索和实践,今天终于根据DLL文件重建了LIB文件,大体步骤如下: 继续阅读

NetBeans – 2 字节的 UTF-8 序列的字节 2 无效

今天初学Java,于是用NetBeans创建了一个安卓工程,结果一开始就遇见两个问题:

1. MainActivity.java里提示程序包R不存在import android.R;后又变成R.layout里找不到符号main。

针对问题1,转到项目里,右键选择构建把项目先构建一遍就行了。

2. 在NetBeans打开build.xml时提示2 字节的 UTF-8 序列的字节 2 无效

针对问题2,搜索一番以后,解决方案如下(不一定适用于你):
2.1 用记事本打开build.xml,确认里面的encoding设置为UTF-8,如果已经是则直接下一步。
2.2 选择文件另存为,在保存文件窗口里把文件编码由ANSI(或其他非UTF-8)改为UTF-8

当然如果以上方法无法解决你的问题,建议bing或者google英文错误提示,获得更多解决方法。