在Module中运行VBA时Excel挂起

时间:2017-03-02 18:31:34

标签: excel vba excel-vba

Excel新秀在这里。我正在尝试一项非常简单的任务:复制和粘贴单元格。 Excel将进入"无响应"一旦VBA运行。代码在某一点上运行,但随着我开发更多行,Excel停止响应。我注释掉了剩余的行,只运行下面显示的行,Excel仍然挂起。有任何想法吗?谢谢!

另外,我在Excel中的模块中编写代码。

Sub EDRII()
Application.ScreenUpdating = False

Dim EDR As Worksheet, Lookup As Worksheet, FA As Worksheet
Set EDR = Sheets("for edr II")
Set Lookup = Sheets("Lookup")
Set FA = Sheets("FA_Segment_Region")

Sheets(EDR).Activate
Range("B6:X10").Copy Range("B5:X9")

Application.ScreenUpdating = True
End Sub

Excel xlsm

2 个答案:

答案 0 :(得分:2)

您已将EDR定义为Worksheet,并将其指定为对“for edr II”的工作表的引用。

当您稍后尝试使用它时,在

行中
Sheets(EDR).Activate

您在VBA期待EDRString(或Integer)的地方使用Long

该行应该简单地说

EDR.Activate

尽可能避免使用ActivateSelect也是个好主意,因此,您可以使用

而不是激活工作表。
EDR.Range("B6:X10").Copy EDR.Range("B5:X9")

代表Copy语句。

答案 1 :(得分:1)

这里有一些指示:

  1. 缩进代码,以便更容易理解(在您的示例中为小点)
  2. 完全限定您的参考资料(ThisWorkbook.Worksheets(), EDR.Range(), etc
  3. 使用.Value
  4. ,而不是复制和粘贴

    您的代码正在崩溃,因为您尝试使用Sheets(EDR).Activate激活EDR,而EDR.Activate应该只是Activate。无论哪种方式,当你考虑到上述几点时,你就会发现你不需要Sub EDRII() Application.ScreenUpdating = False Dim EDR As Worksheet, Lookup As Worksheet, FA As Worksheet Set EDR = ThisWorkbook.Worksheets("for edr II") Set Lookup = ThisWorkbook.Sheets("Lookup") Set FA = ThisWorkbook.Sheets("FA_Segment_Region") EDR.Range("B5:X9").Value = EDR.Range("B6:X10").Value Application.ScreenUpdating = True End Sub 任何东西!

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    public class JDBCconnectionTester {
    
      public static void main(String[] args) {
        System.out.println(queryDB("127.0.0.1", "testdb", "testuser", "testpasswd"));
      }
    
    
      /**
       * Connect to MySQL database at given host
       * 
       * @param ip
       * @param database
       * @param username
       * @param password
       * @return
       */
      public static String queryDB(String ip, String database, String username, String password) {
        String data;
        data = "";
        try {
          Class.forName("com.mysql.jdbc.Driver");
          Connection con = DriverManager.getConnection(("jdbc:mysql://" + ip + ":3306/" + database),
              username, password);
          Statement stmt = con.createStatement();
          ResultSet rs = stmt.executeQuery("select * from roles");
          while (rs.next())
            data += rs.getString(1) + "  " + rs.getString(2) + "  " + rs.getString(3) + "\n";
          con.close();
        } catch (Exception e) {
          data = "Error with JDBC Connection: \n\n" + e;
        }
        return data;
      }
    
    }