From 1a6d241e0afc31491e40100a901216843870cc40 Mon Sep 17 00:00:00 2001 From: Alex Reed Date: Fri, 28 Feb 2020 18:32:12 -0800 Subject: [PATCH] reorganize VBA folder --- ...guage Tutorial - Accessing Data Sources.pq | 83 ---- ...erence Language Tutorial - Introduction.pq | 372 --------------- ...M-Reference Language Tutorial - Records.pq | 96 ---- ...ce API - Asynchronous vs. Synchronous.pptx | Bin 0 -> 80699 bytes ...oduction to Office API - Introduction.pptx | Bin 0 -> 66486 bytes ... - Variable Declarations & Data Types.pptx | Bin 0 -> 64680 bytes .../add-reference/Add References.bas | 0 .../Connect To Access Database.bas | 96 ++-- .../commandbar-object/Commandbar Object.bas | 0 .../CommandbarControls Object.bas | 0 .../Create Zipped Folders.bas | 0 .../export-macros/Export Macros.bas | 0 .../file-system-object/File System Object.bas | 0 .../python-from-excel/Run Python Script.bas | 0 .../Scripting Automation.bas | 0 .../export-manager/Export Manager.bas | 0 .../user-forms/sql-query/SQLQueryForm.frm | 0 .../user-forms/sql-query/SQLQueryForm.frx | Bin .../user-forms/sql-query/UserFormSql.bas | 0 .../visual-basic-editor.vb | 0 .../web-scraping/Webscraping.bas | 0 .../web-scraping/WebscrapingTables.bas | 0 .../xml-library/JsonConverter.bas | 0 .../xml-library/Requesting APIs - JSON.bas | 0 .../xml-library/Requesting APIs - XML.bas | 0 .../Conditions - Case Statements.bas} | 418 ++++++++-------- .../Conditions - If Statements.bas} | 332 ++++++------- .../Data Types - All.bas} | 448 +++++++++--------- .../Data Types - Arrays.bas} | 188 ++++---- .../Data Types - Late Vs Early Binding.bas} | 132 +++--- .../Loops - For Each.bas} | 156 +++--- .../Loops - For.bas} | 160 +++---- .../operators/Operators - Arithmetic.bas} | 52 +- .../operators/Operators - Comparison.bas} | 88 ++-- .../operators/Operators - Logical.bas} | 106 ++--- .../operators/Operators - Strings.bas} | 68 +-- .../variables/Variables - Declare.bas} | 32 +- .../variables/Variables - Run.bas} | 36 +- .../variables/Variables - Static.bas} | 44 +- .../variables/Variables.bas | 52 +- .../chart-objects/Charts Part 1.bas | 0 .../chart-objects/Charts Part 2.bas | 0 .../chart-objects/Charts Part 3.bas} | 0 .../connection-objects/connection-xls.vb | 0 .../Import Text File - Non Power Query.bas | 0 .../formatting}/Formatting Cells.bas | 406 ++++++++-------- .../Working With List Objects.bas | 222 ++++----- .../pivot-tables/Pivot Table Part 1.bas} | 126 ++--- .../pivot-tables/Pivot Table Part 2.bas} | 232 ++++----- .../pivot-tables/Pivot Table Part 3.bas} | 158 +++--- .../power-pivot/Power Pivot Part 1.bas} | 128 ++--- .../power-pivot/Power Pivot Part 2.bas} | 0 .../power-pivot/Power Pivot Part 3.bas} | 0 .../Power Query - Import Text File.bas} | 92 ++-- .../Power Query - Query Table Object.bas} | 74 +-- .../range}/Selecting Ranges - Book.bas | 156 +++--- .../range}/Selecting Ranges - Last.bas | 144 +++--- .../range}/Selecting Ranges - Offset.bas | 152 +++--- .../Selecting Ranges - Selecting Cells.bas | 154 +++--- .../Loop Through Sheets And Books.bas | 186 ++++---- .../workbook}/Selecting Workbooks.bas | 174 +++---- .../worksheet}/Selecting Worksheets.bas | 98 ++-- .../Excel to PowerPoint - Charts.bas} | 433 +++++++++-------- .../Excel to PowerPoint - Paste Methods.bas} | 0 .../Excel to PowerPoint - Pictures.bas} | 172 +++---- .../Excel to PowerPoint - Ranges.bas} | 242 +++++----- ...el to PowerPoint - Shape Manipulation.bas} | 420 ++++++++-------- ...int - Specific Slide Multiple Objects.bas} | 174 +++---- .../Excel to PowerPoint - Specific Slide.bas} | 0 .../Excel to PowerPoint - Tables.bas} | 0 ...owerPoint - Copy and Paste Shape Size.bas} | 0 .../PowerPoint - Slide Object.bas} | 0 ...oint - TextFrame and TextRange Object.bas} | 0 .../PowerPoint - Update Links.bas} | 0 .../Excel To Word - Chart.bas} | 334 ++++++------- .../Excel To Word - Range.bas} | 182 +++---- .../Excel To Word - Table.bas} | 216 ++++----- .../Word - Align Shapes.bas} | 238 +++++----- .../Word - Building Blocks Object.bas} | 0 .../Word - Document Object.bas} | 0 .../Word - Find Object.bas} | 0 .../Word - Headers & Footers - Object.bas} | 0 .../Word - Navigate Words.bas} | 0 .../Word - Paragraph Object.bas} | 0 .../Word - Statistics.bas} | 0 .../Word - Template Object.bas} | 0 86 files changed, 3659 insertions(+), 4213 deletions(-) delete mode 100644 m language/M-Reference Language Tutorial - Accessing Data Sources.pq delete mode 100644 m language/M-Reference Language Tutorial - Introduction.pq delete mode 100644 m language/M-Reference Language Tutorial - Records.pq create mode 100644 resources/javascript/Introduction to Office API - Asynchronous vs. Synchronous.pptx create mode 100644 resources/javascript/Introduction to Office API - Introduction.pptx create mode 100644 resources/javascript/Introduction to Office API - Variable Declarations & Data Types.pptx rename vba/{advanced-vba => vba-advanced}/add-reference/Add References.bas (100%) rename vba/{excel-vba => vba-advanced}/adodb-library/Connect To Access Database.bas (96%) rename vba/{advanced-vba => vba-advanced}/commandbar-object/Commandbar Object.bas (100%) rename vba/{advanced-vba => vba-advanced}/commandbar-object/CommandbarControls Object.bas (100%) rename vba/{advanced-vba => vba-advanced}/create-zipped-folder/Create Zipped Folders.bas (100%) rename vba/{advanced-vba => vba-advanced}/export-macros/Export Macros.bas (100%) rename vba/{excel-vba => vba-advanced}/file-system-object/File System Object.bas (100%) rename vba/{advanced-vba => vba-advanced}/python-from-excel/Run Python Script.bas (100%) rename vba/{advanced-vba => vba-advanced}/scripting-automation-library/Scripting Automation.bas (100%) rename vba/{advanced-vba => vba-advanced}/user-forms/export-manager/Export Manager.bas (100%) rename vba/{advanced-vba => vba-advanced}/user-forms/sql-query/SQLQueryForm.frm (100%) rename vba/{advanced-vba => vba-advanced}/user-forms/sql-query/SQLQueryForm.frx (100%) rename vba/{advanced-vba => vba-advanced}/user-forms/sql-query/UserFormSql.bas (100%) rename vba/{advanced-vba => vba-advanced}/visual-basic-editor/visual-basic-editor.vb (100%) rename vba/{advanced-vba => vba-advanced}/web-scraping/Webscraping.bas (100%) rename vba/{advanced-vba => vba-advanced}/web-scraping/WebscrapingTables.bas (100%) rename vba/{advanced-vba => vba-advanced}/xml-library/JsonConverter.bas (100%) rename vba/{advanced-vba => vba-advanced}/xml-library/Requesting APIs - JSON.bas (100%) rename vba/{advanced-vba => vba-advanced}/xml-library/Requesting APIs - XML.bas (100%) rename vba/{excel-vba/core-concepts/Case Statements.bas => vba-core/Conditions - Case Statements.bas} (96%) rename vba/{excel-vba/core-concepts/If Statements.bas => vba-core/Conditions - If Statements.bas} (95%) rename vba/{excel-vba/core-concepts/Data Types.bas => vba-core/Data Types - All.bas} (95%) rename vba/{excel-vba/core-concepts/Working With Arrays.bas => vba-core/Data Types - Arrays.bas} (95%) rename vba/{excel-vba/core-concepts/Late And Early Binding.bas => vba-core/Data Types - Late Vs Early Binding.bas} (96%) rename vba/{excel-vba/core-concepts/For Each Loop.bas => vba-core/Loops - For Each.bas} (95%) rename vba/{excel-vba/core-concepts/For Loops.bas => vba-core/Loops - For.bas} (93%) rename vba/{excel-vba/core-concepts/operators/Arithmetic Operators.bas => vba-core/operators/Operators - Arithmetic.bas} (95%) rename vba/{excel-vba/core-concepts/operators/Comparison Operators.bas => vba-core/operators/Operators - Comparison.bas} (96%) rename vba/{excel-vba/core-concepts/operators/Logical Operators.bas => vba-core/operators/Operators - Logical.bas} (95%) rename vba/{excel-vba/core-concepts/operators/String Operators.bas => vba-core/operators/Operators - Strings.bas} (96%) rename vba/{excel-vba/core-concepts/variables/Declare Variables.bas => vba-core/variables/Variables - Declare.bas} (95%) rename vba/{excel-vba/core-concepts/variables/Variables Run.bas => vba-core/variables/Variables - Run.bas} (94%) rename vba/{excel-vba/core-concepts/variables/Variables Static.bas => vba-core/variables/Variables - Static.bas} (94%) rename vba/{excel-vba/core-concepts => vba-core}/variables/Variables.bas (94%) rename vba/{excel-vba => vba-excel}/chart-objects/Charts Part 1.bas (100%) rename vba/{excel-vba => vba-excel}/chart-objects/Charts Part 2.bas (100%) rename vba/{excel-vba/chart-objects/Chart Part 3.bas => vba-excel/chart-objects/Charts Part 3.bas} (100%) rename vba/{excel-vba => vba-excel}/connection-objects/connection-xls.vb (100%) rename vba/{excel-vba => vba-excel}/data-imports/Import Text File - Non Power Query.bas (100%) rename vba/{excel-vba/core-concepts => vba-excel/formatting}/Formatting Cells.bas (97%) rename vba/{excel-vba => vba-excel}/list-objects/Working With List Objects.bas (97%) rename vba/{excel-vba/pivot-tables/Pivot Table - Part 1.bas => vba-excel/pivot-tables/Pivot Table Part 1.bas} (96%) rename vba/{excel-vba/pivot-tables/Pivot Table - Part 2.bas => vba-excel/pivot-tables/Pivot Table Part 2.bas} (96%) rename vba/{excel-vba/pivot-tables/Pivot Table - Part 3.bas => vba-excel/pivot-tables/Pivot Table Part 3.bas} (97%) rename vba/{excel-vba/power-pivot/Power Pivot - Part 1.bas => vba-excel/power-pivot/Power Pivot Part 1.bas} (97%) rename vba/{excel-vba/power-pivot/Power Pivot - Part 2.bas => vba-excel/power-pivot/Power Pivot Part 2.bas} (100%) rename vba/{excel-vba/power-pivot/Power Pivot - Part 3.bas => vba-excel/power-pivot/Power Pivot Part 3.bas} (100%) rename vba/{excel-vba/power-query/Import Text File.bas => vba-excel/power-query/Power Query - Import Text File.bas} (97%) rename vba/{excel-vba/power-query/Query Table Info.bas => vba-excel/power-query/Power Query - Query Table Object.bas} (97%) rename vba/{excel-vba/core-concepts/ranges => vba-excel/range}/Selecting Ranges - Book.bas (97%) rename vba/{excel-vba/core-concepts/ranges => vba-excel/range}/Selecting Ranges - Last.bas (96%) rename vba/{excel-vba/core-concepts/ranges => vba-excel/range}/Selecting Ranges - Offset.bas (95%) rename vba/{excel-vba/core-concepts/ranges => vba-excel/range}/Selecting Ranges - Selecting Cells.bas (96%) rename vba/{excel-vba/core-concepts => vba-excel/workbook}/Loop Through Sheets And Books.bas (96%) rename vba/{excel-vba/core-concepts => vba-excel/workbook}/Selecting Workbooks.bas (98%) rename vba/{excel-vba/core-concepts => vba-excel/worksheet}/Selecting Worksheets.bas (94%) rename vba/{powerpoint-vba/Excel Chart To PowerPoint.bas => vba-powerpoint/Excel to PowerPoint - Charts.bas} (96%) rename vba/{powerpoint-vba/Excel to PowerPoint Paste Methods.bas => vba-powerpoint/Excel to PowerPoint - Paste Methods.bas} (100%) rename vba/{powerpoint-vba/Excel Picture To PowerPoint.bas => vba-powerpoint/Excel to PowerPoint - Pictures.bas} (96%) rename vba/{powerpoint-vba/Excel Range To PowerPoint.bas => vba-powerpoint/Excel to PowerPoint - Ranges.bas} (96%) rename vba/{powerpoint-vba/Excel Shape Manipulation In PowerPoint.bas => vba-powerpoint/Excel to PowerPoint - Shape Manipulation.bas} (96%) rename vba/{powerpoint-vba/Multiple Excel Objects To PowerPoint.bas => vba-powerpoint/Excel to PowerPoint - Specific Slide Multiple Objects.bas} (96%) rename vba/{powerpoint-vba/Export Excel Objects To Specific Slide.bas => vba-powerpoint/Excel to PowerPoint - Specific Slide.bas} (100%) rename vba/{powerpoint-vba/Excel Table to PowerPoint.bas => vba-powerpoint/Excel to PowerPoint - Tables.bas} (100%) rename vba/{powerpoint-vba/ShapeFinder.bas => vba-powerpoint/PowerPoint - Copy and Paste Shape Size.bas} (100%) rename vba/{powerpoint-vba/Working With Slides.bas => vba-powerpoint/PowerPoint - Slide Object.bas} (100%) rename vba/{powerpoint-vba/Working With Text Frames And Text Ranges.bas => vba-powerpoint/PowerPoint - TextFrame and TextRange Object.bas} (100%) rename vba/{powerpoint-vba/UpdateLinks.bas => vba-powerpoint/PowerPoint - Update Links.bas} (100%) rename vba/{word-vba/Excel Chart To Word.bas => vba-word/Excel To Word - Chart.bas} (96%) rename vba/{word-vba/Excel Range To Word.bas => vba-word/Excel To Word - Range.bas} (96%) rename vba/{word-vba/Excel Table To Word.bas => vba-word/Excel To Word - Table.bas} (96%) rename vba/{word-vba/Align Shapes In Word.bas => vba-word/Word - Align Shapes.bas} (96%) rename vba/{word-vba/Working With Building Blocks.bas => vba-word/Word - Building Blocks Object.bas} (100%) rename vba/{word-vba/Working With Documents.bas => vba-word/Word - Document Object.bas} (100%) rename vba/{word-vba/Working With the Find Object.bas => vba-word/Word - Find Object.bas} (100%) rename vba/{word-vba/Headers & Footers.bas => vba-word/Word - Headers & Footers - Object.bas} (100%) rename vba/{word-vba/Loop Through Words.bas => vba-word/Word - Navigate Words.bas} (100%) rename vba/{word-vba/Working With Paragraphs.bas => vba-word/Word - Paragraph Object.bas} (100%) rename vba/{word-vba/Count Lines In Doc.bas => vba-word/Word - Statistics.bas} (100%) rename vba/{word-vba/Working With Templates.bas => vba-word/Word - Template Object.bas} (100%) diff --git a/m language/M-Reference Language Tutorial - Accessing Data Sources.pq b/m language/M-Reference Language Tutorial - Accessing Data Sources.pq deleted file mode 100644 index 44f4da1..0000000 --- a/m language/M-Reference Language Tutorial - Accessing Data Sources.pq +++ /dev/null @@ -1,83 +0,0 @@ - -/* - - Working with data sources. - ---------------------------------------- - Inside Power Query and Power BI you'll be working with a variety of data sources, so it's important to know how to take your different files - and load them into these applications in the correct way. Depending on the type of file it is, the steps you take could be different, but - we will cover a few common scenarios for loading data. - -*/ - - - -let - - // The most basic thing we can do is grab all the BINARY CONTENT of a file. - myCSVFileContent = File.Contents("C:\Users\Alex\OneDrive\Desktop\korea_data.csv"), - - // Depending on the type of file it's coming from, we then pass it through the propert document function. In this case a Csv.Document function. - myCsvDocument = Csv.Document(myCSVFileContent, [Delimiter=",", Columns=11, Encoding=TextEncoding.Utf8, QuoteStyle=QuoteStyle.None]), - - /* - Normally you'll see the two steps up above in a single command, where the "File.Contents" function is found inside the document function. - - Source = Csv.Document(File.Contents("C:\Users\Alex\OneDrive\Desktop\korea_data.csv"),[Delimiter=",", Columns=11, Encoding=65001, QuoteStyle=QuoteStyle.None]) - */ - - //Let's grab an Excel workbook this time, first grab the content. - myExcelFileContent = File.Contents("C:\Users\Alex\OneDrive\Growth - Tutorial Videos\Lessons - VBA\balance_sheet_test.xlsx"), - - // Then pass it through the Excel.Workbook function. This particular document does not use a record to house paramaters. - myExcelFileDocument = Excel.Workbook(myExcelFileContent, true, true), - - /* - If you want the current workbook you're in, then do the following. - - Source = Excel.CurrentWorkbook() - - No arguments are needed. - */ - - - // However, content comes in many forms, we also have web pages. First we grab the web content. - myWebContent = Web.Contents("https://en.wikipedia.org/wiki/Star_Wars", [Timeout=#duration(0, 1, 40, 0)]), - - // Then pass it through the Web.Page function. Again, normally, these two steps are merged into one. - myWebPageContent = Web.Page(myWebPageContent), - - - - // Let's grab an acccess database. Because it's technially a file, we use the File.Contents first. - myAccessDatabaseContent = File.Contents("C:\Users\Alex\OneDrive\Career - Work Items\Petco\Financial_Analyst\Petco_Financial_Data.accdb"), - - // Then pass it through the proper document. - myAccessDatabase = Access.Database(myAccessDatabaseContent ,[CreateNavigationProperties=true]), - - // From here a new table is returned that has a structural representation of the database. If I want to grab a specific table I would do the following. - myAccessTable = myAccessDatabase{[Item = "ACTUALS_CAPITAL"]}[Data], // You can read this as return the row that has the column "Item" equal to "ACTUALS_CAPITAL" and then grab the "Data" column from that row. - - - // Let's grab an SQL Database, here I specify a Server, a Database, and set the HierarchicalNavigation to true and pass through a query. - mySQLDatabase= Sql.Database("DESKTOP-MOA8O6M\SQLEXPRESS", "stock_database", [HierarchicalNavigation=true, Query="SELECT * FROM [dbo].[td_service_data]"]), - - // Let's grab all the content of a folder. Where each row is either a file (binary) or folder (table) - myFolderContents = Folder.Contents("C:\Users\Alex\OneDrive\Growth - Tutorial Videos"), - - // Let's grab all the content of a JSON document. - myJsonDocument = Json.Document(File.Contents("C:\Users\Alex\OneDrive\Desktop\MyJsonDocument.json")), - - // Doesn't seem to be released yet? - myHTMLTable = Html.Table("Test", {{"Link", "a", each [Attributes][href]}}), - - // Grab all the Tables in PDF file - myPDFTables = Pdf.Tables(File.Contents("C:\Users\Alex\OneDrive\Desktop\Linear Regression Model.pdf")) - - // Let's wrap things up and make an API request. - myApiRequest = Json.Document(Web.Contents("https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=MSFT&interval=5min&apikey=demo")) - - -in - myApiRequest - - \ No newline at end of file diff --git a/m language/M-Reference Language Tutorial - Introduction.pq b/m language/M-Reference Language Tutorial - Introduction.pq deleted file mode 100644 index cdff8f2..0000000 --- a/m language/M-Reference Language Tutorial - Introduction.pq +++ /dev/null @@ -1,372 +0,0 @@ - -/* - - What is the M Formula Langague? - ---------------------------------------- - Microsoft Power Query provides a powerful data import experience that encompasses many features. Power Query works with - Analysis Services, Excel, and Power BI workbooks. A core capability of Power Query is to filter and combine, that is, to mash-up - data from one or more of a rich collection of supported data sources. Any such data mashup is expressed using the Power Query - M Formula Language. It's a functional, case sensitive language similar to F#. - - What is a M Formula Language Query? - ------------------------------------ - A Power Query M formula language query is composed of formula expression steps that create a mashup query. A formula expression - can be evaluated (computed), yielding a value. The let expression encapsulates a set of values to be computed, assigned names, - and then used in a subsequent expression that follows the in statement. - - Below is an example of a M Formula Language Query. - -*/ - - /* - Comment Structure - ------------------------------------ - */ - - /* Multi - Line - Comment */ - - // Single Line Comment - - -let - Source = Text.Proper("hello world.") -in - Source - - - -/* - - What is a Primitive Value? - ---------------------------------------- - A primitive value is single-part value, such as a number, logical, text, or null. - A null value can be used to indicate the absence of any data. - - Below is an example of the different primitive values. - -*/ - - - -let - - myBinary = #binary({0x30, 0x31, 0x32}), - myDate = #date(2015, 5, 23), - myDateTime = #datetime(2015, 5, 23, 0, 0 ,0), - myDateTimeZone = #datetimezone(2015, 5, 23, 0, 0 ,0, -8, 0), - myDuration = #duration(0, 15, 35, 0), - myLogical = true, - myNull = null, - myNumber = 0, - myText = "abc", - myTime = #time(12, 34, 12) - -in - myTime - - - -/* - - What is a Functional Value? - ---------------------------------------- - A Function is a value which, when invoked with arguments, produces a new value. Functions are written by - listing the function’s parameters in parentheses, followed by the goes-to symbol =>, followed by the expression defining the function. - - Below is an example of a functional value. - -*/ - - -let - // Define the function - MyFunction = (parameter1, parameter2) => (parameter1 + parameter2) / 2 , - - // call my function - Source = MyFunction(2, 4) - -in - Source - -/* - - What are Structured Data Values? - ---------------------------------------- - - List - -------------- - A List is a zero-based ordered sequence of values enclosed in curly brace characters { }. The curly brace characters { } - are also used to retrieve an item from a List by index position. See [List value](#_List_value). - - Power Query M supports an infinite list size, but if a list is written as a literal, the list has a fixed length. - For example, {1, 2, 3} has a fixed length of 3. - - - Record - ------------- - A Record is a set of fields. A field is a name/value pair where the name is a text value that is unique within the field’s - record. The syntax for record values allows the names to be written without quotes, a form also referred to as identifiers. - An identifier can take the following two forms: - - 1. identifier_name such as OrderID. - 2. #"identifier name" such as #"Today's data is: ". - - - Table - ------------ - A Table is a set of values organized into named columns and rows. The column type can be implicit or explicit. You can use - #table to create a list of column names and list of rows. A Table of values is a List in a List. The curly brace characters { } - are also used to retrieve a row from a Table by index position. - - -*/ - - -let - - myList = {"a", 100, false}, - myListOfNumbers = {1, 2, 3}, - myListOfLists = { - {1, 2, 3}, - {"a", "b", "c"}, - {true, false, true}, - {"a", 100, false} - }, - myListOfRecords = { - [CustomerID = 1, Name = "Bob", Phone = "123-4567"], - [CustomerID = 2, Name = "Jim", Phone = "987-6543"] - }, - myListIndexing = {"a", 100, false}{0}, /* returns "a" */ - myListIndexingNested = { - {1, 2, 3}, - {"a", "b", "c"}, - {true, false, true}, - {"a", 100, false} - }{0}{1} /* returns 2 */ - -in - myListIndexingNested - - -let - myRecord = [Name = "Alex", ID = 1111, Hometown = "San Diego"], - myRecordsNested = [Name = "Alex", ID = 1111, Hometown = "San Diego", Order = [ProductID = "ABC", Amount = 100.00]], - myName = myRecord[Name], - myAmount = myRecordsNested[Order][Amount] - -in - myAmount - - -let - myTable = #table( - {"OrderID", "CustomerID", "Item", "Price"}, /* My Column Names */ - {{1, 1, "Fishing rod", 100.00}, /* My Row 1 */ - {2, 1, "1 lb. worms", 5.00}} /* My Row 2 */ - ), - - myTableWithTypes = #table( - type table [OrderID = number, CustomerID = number, Item = text, Price = number], /* My Column Names With Defined Types */ - {{1, 1, "Fishing rod", 100.00}, /* My Row 1 */ - {2, 1, "1 lb. worms", 5.00}} /* My Row 2 */ - ), - - myTableRowOne = myTable{0} - -in - myTableRowOne - -/* - -TYPE CONVERSION ------------------------------------------------------------------------------------------------------------------------------------------------------- - -NUMBER ------- -Type conversion Description ---------------- ----------- -Number.FromText(text as text) as number Returns a number value from a text value. -Number.ToText(number as number) as text Returns a text value from a number value. -Number.From(value as any) as number Returns a number value from a value. -Int32.From(value as any) as number Returns a 32-bit integer number value from the given value. -Int64.From(value as any) as number Returns a 64-bit integer number value from the given value. -Single.From(value as any) as number Returns a Single number value from the given value. -Double.From(value as any) as number Returns a Double number value from the given value. -Decimal.From(value as any) as number Returns a Decimal number value from the given value. -Currency.From(value as any) as number Returns a Currency number value from the given value. - - -TEXT ------- -Type conversion Description ---------------- ----------- -Text.From(value as any) as text Returns the text representation of a number, date, time, datetime, datetimezone, logical, duration or binary value. - - -LOGICAL ------- -Type conversion Description ---------------- ----------- -Logical.FromText(text as text) as logical Returns a logical value of true or false from a text value. -Logical.ToText(logical as logical) as text Returns a text value from a logical value. -Logical.From(value as any) as logical Returns a logical value from a value. - - -DATE, TIME, DATETIME, AND DATE TIMEZONE ---------------------------------------- -Type conversion Description ---------------- ----------- -.FromText(text as text) as date, time, datetime, or datetimezone Returns a date, time, datetime, or datetimezone value from a set of date formats and culture value. -.ToText(date, time, dateTime, or dateTimeZone as date, time, datetime, or datetimezone) as text Returns a text value from a date, time, datetime, or datetimezone value. -.From(value as any) Returns a date, time, datetime, or datetimezone value from a value. -.ToRecord(date, time, dateTime, or dateTimeZone as date, time, datetime, or datetimezone) Returns a record containing parts of a date, time, datetime, or datetimezone value. - - -*/ - - - -/* - -OPERATORS ------------------------------------------------------------------------------------------------------------------------------------------------------- - - -Plus operator (+) ------------------------------- -Expression Equals -1 + 2 Numeric addition: 3 -#time(12,23,0) + #duration(0,0,2,0) Time arithmetic: #time(12,25,0) - - -Combination operator (&) ------------------------------- -Function Equals -"A" & "BC" Text concatenation: "ABC" -{1} & {2, 3} List concatenation: {1, 2, 3} -[ a = 1 ] & [ b = 2 ] Record merge: [ a = 1, b = 2 ] - - -List of M operators ------------------------------- - - -COMMON OPERATORS ------------------ -Common operators which apply to null, logical, number, time, date, datetime, datetimezone, duration, text, binary) - -Operator Description --------- ------------ -> Greater than ->= Greater than or equal -< Less than -<= Less than or equal -= Equal -<> Not equal - - -LOGICAL OPERATORS ------------------ - -Operator Description --------- ------------ -or Conditional logical OR -and Conditional logical AND -not Logical NOT - - -NUMBER OPERATORS ------------------ - -Operator Description --------- ------------ -+ Sum -- Difference -* Product -/ Quotient -+x Unary plus --x Negation - - -TEXT OPERATORS ------------------ - -Operator Description --------- ------------ -& Concatenation - - -LIST, RECORD, AND TABLE OPERATORS ------------------ - -Operator Description --------- ------------ -= Equal -<> Not equal -& Concatenation -[] Access the fields of a record by name. -{} Access an item in a list by its zero-based numeric index. - - -TYPE COMPATIABILITY AND ASSERTION OPERATORS ------------------ - -Operator Description --------- ------------ -is The expression x is y returns true if the type of x is compatible with y, and returns false if the type of x is not compatible with y. -as The expression x as y asserts that the value x is compatible with y as per the is operator. - - - -DATE OPERATORS ------------------ - -Operator Left Operand Right Operand Meaning ---------- ------------ ------------- ------- -x + y time duration Date offset by duration -x + y duration time Date offset by duration -x - y time duration Date offset by negated duration -x - y time time Duration between dates -x & y date time Merged datetime - - -DATETIME OPERATORS ------------------- - -Operator Left Operand Right Operand Meaning ---------- ------------ ------------- ------- -x + y datetime duration Datetime offset by duration -x + y duration datetime Datetime offset by duration -x - y datetime duration Datetime offset by negated duration -x - y datetime datetime Duration between datetimes - - -DATETIMEZONE OPERATORS ----------------------- - -Operator Left Operand Right Operand Meaning ---------- ------------ ------------- ------- -x + y datetimezone duration Datetimezone offset by duration -x + y duration datetimezone Datetimezone offset by duration -x - y datetimezone duration Datetimezone offset by negated duration -x - y datetimezone datetimezone Duration between datetimezones - - -DURATION OPERATORS ------------------- - -Operator Left Operand Right Operand Meaning ---------- ------------ ------------- ------- -x + y datetime duration Datetime offset by duration -x + y duration datetime Datetime offset by duration -x + y duration duration Sum of durations -x - y datetime duration Datetime offset by negated duration -x - y datetime datetime Duration between datetimes -x - y duration duration Difference of durations -x * y duration number N times a duration -x * y number duration N times a duration -x / y duration number Fraction of a duration - -*/ \ No newline at end of file diff --git a/m language/M-Reference Language Tutorial - Records.pq b/m language/M-Reference Language Tutorial - Records.pq deleted file mode 100644 index d1c6791..0000000 --- a/m language/M-Reference Language Tutorial - Records.pq +++ /dev/null @@ -1,96 +0,0 @@ - - -/* - What is a Record? - ----------------- - A Record is a set of fields. A field is a name/value pair where the name is a text value that is unique within the field’s - record. The syntax for record values allows the names to be written without quotes, a form also referred to as identifiers. - An identifier can take the following two forms: - - 1. identifier_name such as OrderID. - 2. #"identifier name" such as #"Today's data is: ". - -*/ - - -let - - // Lets define a new record, with 5 fields. - myRecord = [Name = "Alex", Age = 26, Gender = "Male", CollegeDegree = true, Salary = 1.00], - - // We can add a new field with Record.AddField function. - myRecordAddField = Record.AddField(myRecord, "Hometown","San Diego"), - - // We can remove a field with the Record.RemoveFields function. - myRecordRemoveField = Record.RemoveFields(myRecordAddField, "Gender"), // {"Gender", "Salary"} this will remove two fields Gender and Salary. - - // We can rename a field with the Record.RenameFields function. - myRecordRenamed = Record.RenameFields(myRecordRemoveField, {"Name", "FirstName"}), // {{"Salary", "SalaryCurr"}, {"Name", "FirstName"}} this will rename multiple fields. - - // We can reorder fields with the Record.ReorderFields function. - myRecordReordered = Record.ReorderFields(myRecordRenamed, {"FirstName", "Age", "CollegeDegree", "Hometown", "Salary"}), - - // We can combine two separate records with the Record.Combine function. - myRecordCombined = Record.Combine({myRecordReordered, [Birthday = "11/11/1992", FavoriteColor = "Blue"]}), // Notice that both records are wrapped in a list {} - - // We can transform the type of data each field has with the Record.TransformFields function. - myRecordTransformed = Record.TransformFields(myRecordCombined, {{"FirstName", Text.From}, - {"Age", Number.From}, - {"CollegeDegree", Logical.From}, - {"Hometown", Text.From}, - {"Salary", Decimal.From}, - {"Birthday", Date.FromText}, - {"FavoriteColor", Text.From}}), - - // We can grab all the field values with the Record.FieldValues function. - myRecordValues = Record.FieldValues(myRecordTransformed), - - // We can grab all the field names with the Record.FieldNames function. - myRecordFields = Record.FieldNames(myRecordTransformed), - - // We can select a fields in the following ways: - myName = myRecordTransformed[FirstName], - myAge = Record.Field(myRecordTransformed, "Age"), - myAgeAndName = Record.SelectFields(myRecordTransformed, {"Age", "FirstName"}), - - // We can check whether a field exists using the Record.HasFields function. - hasName = Record.HasFields(myRecordTransformed, "FirstName"), // true - hasNameAndFavoriteBook = Record.HasFields(myRecordTransformed, {"FirstName", "FavoriteBook"}), // {true, false} - - // We can convert a record to a list with Record.ToList function. - myRecordList = Record.ToList(myRecordTransformed), - - // We can convert a record to a table with the Record.ToTable function. - myRecordTable = Record.ToTable(myRecordTransformed), - - // We can try and access a field and if doesn't exist set what happens using the Record.FieldOrDefault function. - myNull = Record.FieldOrDefault(myRecordTransformed, "FavoriteBook"), // returns null as default. - myBook = Record.FieldOrDefault(myRecordTransformed, "FavoriteBook", "Star Wars"), // returns Star Wars as default. - - /* - - Enumeration Name Description - ----------- ---- ----------- - 0 MissingField.Error An optional parameter in record and table functions indicating that missing fields should result in an error. (This is the default parameter value.) - 1 MissingField.Ignore An optional parameter in record and table functions indicating that missing fields should be ignored. - 2 MissingField.UseNull An optional parameter in record and table functions indicating that missing fields should be included as null values. - - - In use it would look like the following: - - Expression: - ----------- - myAgeAndName = Record.SelectFields(myRecordTransformed, {"Age", "FavoriteBook"}, 2) - - Output: - ----------- - {26, null} as 2 represents MissingField.UseNull - - */ - - // Missing Fields Option Change Example - myAgeAndNameBehaviorChange = Record.SelectFields(myRecordTransformed, {"Age", "FavoriteBook"}, 2) - -in - - myAgeAndNameBehaviorChange \ No newline at end of file diff --git a/resources/javascript/Introduction to Office API - Asynchronous vs. Synchronous.pptx b/resources/javascript/Introduction to Office API - Asynchronous vs. Synchronous.pptx new file mode 100644 index 0000000000000000000000000000000000000000..bc5e0631a693745aabeec83c805c37d058bc5eb7 GIT binary patch literal 80699 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 EKTyS?761SM literal 0 HcmV?d00001 diff --git a/resources/javascript/Introduction to Office API - Introduction.pptx b/resources/javascript/Introduction to Office API - Introduction.pptx new file mode 100644 index 0000000000000000000000000000000000000000..be2a7a3db5202dbac23059e5aa6ebd2f7830abbe GIT binary patch literal 66486 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 literal 0 HcmV?d00001 diff --git a/vba/advanced-vba/add-reference/Add References.bas b/vba/vba-advanced/add-reference/Add References.bas similarity index 100% rename from vba/advanced-vba/add-reference/Add References.bas rename to vba/vba-advanced/add-reference/Add References.bas diff --git a/vba/excel-vba/adodb-library/Connect To Access Database.bas b/vba/vba-advanced/adodb-library/Connect To Access Database.bas similarity index 96% rename from vba/excel-vba/adodb-library/Connect To Access Database.bas rename to vba/vba-advanced/adodb-library/Connect To Access Database.bas index 2dab1f4..70614cb 100644 --- a/vba/excel-vba/adodb-library/Connect To Access Database.bas +++ b/vba/vba-advanced/adodb-library/Connect To Access Database.bas @@ -1,48 +1,48 @@ -Option Explicit - -Sub ExportDataToAccess() - - Dim ConnObj As ADODB.Connection - Dim RecSet As ADODB.Recordset - Dim ConnCmd As ADODB.Command - Dim ColNames As ADODB.Fields - Dim DataSource As String - Dim intLoop As Integer - - 'Define the data source - DataSource = "C:\Users\Alex\Desktop\Financial_Data.accdb" - - 'Create a new connection object & a new command object - Set ConnObj = New ADODB.Connection - Set ConnCmd = New ADODB.Command - - 'Create a new connection - With ConnObj - .Provider = "Microsoft.ACE.OLEDB.12.0" 'For *.ACCDB Databases - .ConnectionString = DataSource - .Open - End With - - 'This will allow the command object to use the Active Connection - ConnCmd.ActiveConnection = ConnObj - - 'Define the Query String & the Query Type. - ConnCmd.CommandText = "SELECT * FROM ACTUALS_CAPITAL;" - ConnCmd.CommandType = adCmdText - - 'Exectue the Query & Get the column Names. - Set RecSet = ConnCmd.Execute - Set ColNames = RecSet.Fields - - 'Populate the header row of the Excel Sheet. - For intLoop = 0 To ColNames.Count - 1 - Cells(1, intLoop + 1).Value = ColNames.Item(intLoop).Name - Next - - 'Dump the data in the worksheet. - Range("A2").CopyFromRecordset RecSet - - 'Close the Connection - ConnObj.Close - -End Sub +Option Explicit + +Sub ExportDataToAccess() + + Dim ConnObj As ADODB.Connection + Dim RecSet As ADODB.Recordset + Dim ConnCmd As ADODB.Command + Dim ColNames As ADODB.Fields + Dim DataSource As String + Dim intLoop As Integer + + 'Define the data source + DataSource = "C:\Users\Alex\Desktop\Financial_Data.accdb" + + 'Create a new connection object & a new command object + Set ConnObj = New ADODB.Connection + Set ConnCmd = New ADODB.Command + + 'Create a new connection + With ConnObj + .Provider = "Microsoft.ACE.OLEDB.12.0" 'For *.ACCDB Databases + .ConnectionString = DataSource + .Open + End With + + 'This will allow the command object to use the Active Connection + ConnCmd.ActiveConnection = ConnObj + + 'Define the Query String & the Query Type. + ConnCmd.CommandText = "SELECT * FROM ACTUALS_CAPITAL;" + ConnCmd.CommandType = adCmdText + + 'Exectue the Query & Get the column Names. + Set RecSet = ConnCmd.Execute + Set ColNames = RecSet.Fields + + 'Populate the header row of the Excel Sheet. + For intLoop = 0 To ColNames.Count - 1 + Cells(1, intLoop + 1).Value = ColNames.Item(intLoop).Name + Next + + 'Dump the data in the worksheet. + Range("A2").CopyFromRecordset RecSet + + 'Close the Connection + ConnObj.Close + +End Sub diff --git a/vba/advanced-vba/commandbar-object/Commandbar Object.bas b/vba/vba-advanced/commandbar-object/Commandbar Object.bas similarity index 100% rename from vba/advanced-vba/commandbar-object/Commandbar Object.bas rename to vba/vba-advanced/commandbar-object/Commandbar Object.bas diff --git a/vba/advanced-vba/commandbar-object/CommandbarControls Object.bas b/vba/vba-advanced/commandbar-object/CommandbarControls Object.bas similarity index 100% rename from vba/advanced-vba/commandbar-object/CommandbarControls Object.bas rename to vba/vba-advanced/commandbar-object/CommandbarControls Object.bas diff --git a/vba/advanced-vba/create-zipped-folder/Create Zipped Folders.bas b/vba/vba-advanced/create-zipped-folder/Create Zipped Folders.bas similarity index 100% rename from vba/advanced-vba/create-zipped-folder/Create Zipped Folders.bas rename to vba/vba-advanced/create-zipped-folder/Create Zipped Folders.bas diff --git a/vba/advanced-vba/export-macros/Export Macros.bas b/vba/vba-advanced/export-macros/Export Macros.bas similarity index 100% rename from vba/advanced-vba/export-macros/Export Macros.bas rename to vba/vba-advanced/export-macros/Export Macros.bas diff --git a/vba/excel-vba/file-system-object/File System Object.bas b/vba/vba-advanced/file-system-object/File System Object.bas similarity index 100% rename from vba/excel-vba/file-system-object/File System Object.bas rename to vba/vba-advanced/file-system-object/File System Object.bas diff --git a/vba/advanced-vba/python-from-excel/Run Python Script.bas b/vba/vba-advanced/python-from-excel/Run Python Script.bas similarity index 100% rename from vba/advanced-vba/python-from-excel/Run Python Script.bas rename to vba/vba-advanced/python-from-excel/Run Python Script.bas diff --git a/vba/advanced-vba/scripting-automation-library/Scripting Automation.bas b/vba/vba-advanced/scripting-automation-library/Scripting Automation.bas similarity index 100% rename from vba/advanced-vba/scripting-automation-library/Scripting Automation.bas rename to vba/vba-advanced/scripting-automation-library/Scripting Automation.bas diff --git a/vba/advanced-vba/user-forms/export-manager/Export Manager.bas b/vba/vba-advanced/user-forms/export-manager/Export Manager.bas similarity index 100% rename from vba/advanced-vba/user-forms/export-manager/Export Manager.bas rename to vba/vba-advanced/user-forms/export-manager/Export Manager.bas diff --git a/vba/advanced-vba/user-forms/sql-query/SQLQueryForm.frm b/vba/vba-advanced/user-forms/sql-query/SQLQueryForm.frm similarity index 100% rename from vba/advanced-vba/user-forms/sql-query/SQLQueryForm.frm rename to vba/vba-advanced/user-forms/sql-query/SQLQueryForm.frm diff --git a/vba/advanced-vba/user-forms/sql-query/SQLQueryForm.frx b/vba/vba-advanced/user-forms/sql-query/SQLQueryForm.frx similarity index 100% rename from vba/advanced-vba/user-forms/sql-query/SQLQueryForm.frx rename to vba/vba-advanced/user-forms/sql-query/SQLQueryForm.frx diff --git a/vba/advanced-vba/user-forms/sql-query/UserFormSql.bas b/vba/vba-advanced/user-forms/sql-query/UserFormSql.bas similarity index 100% rename from vba/advanced-vba/user-forms/sql-query/UserFormSql.bas rename to vba/vba-advanced/user-forms/sql-query/UserFormSql.bas diff --git a/vba/advanced-vba/visual-basic-editor/visual-basic-editor.vb b/vba/vba-advanced/visual-basic-editor/visual-basic-editor.vb similarity index 100% rename from vba/advanced-vba/visual-basic-editor/visual-basic-editor.vb rename to vba/vba-advanced/visual-basic-editor/visual-basic-editor.vb diff --git a/vba/advanced-vba/web-scraping/Webscraping.bas b/vba/vba-advanced/web-scraping/Webscraping.bas similarity index 100% rename from vba/advanced-vba/web-scraping/Webscraping.bas rename to vba/vba-advanced/web-scraping/Webscraping.bas diff --git a/vba/advanced-vba/web-scraping/WebscrapingTables.bas b/vba/vba-advanced/web-scraping/WebscrapingTables.bas similarity index 100% rename from vba/advanced-vba/web-scraping/WebscrapingTables.bas rename to vba/vba-advanced/web-scraping/WebscrapingTables.bas diff --git a/vba/advanced-vba/xml-library/JsonConverter.bas b/vba/vba-advanced/xml-library/JsonConverter.bas similarity index 100% rename from vba/advanced-vba/xml-library/JsonConverter.bas rename to vba/vba-advanced/xml-library/JsonConverter.bas diff --git a/vba/advanced-vba/xml-library/Requesting APIs - JSON.bas b/vba/vba-advanced/xml-library/Requesting APIs - JSON.bas similarity index 100% rename from vba/advanced-vba/xml-library/Requesting APIs - JSON.bas rename to vba/vba-advanced/xml-library/Requesting APIs - JSON.bas diff --git a/vba/advanced-vba/xml-library/Requesting APIs - XML.bas b/vba/vba-advanced/xml-library/Requesting APIs - XML.bas similarity index 100% rename from vba/advanced-vba/xml-library/Requesting APIs - XML.bas rename to vba/vba-advanced/xml-library/Requesting APIs - XML.bas diff --git a/vba/excel-vba/core-concepts/Case Statements.bas b/vba/vba-core/Conditions - Case Statements.bas similarity index 96% rename from vba/excel-vba/core-concepts/Case Statements.bas rename to vba/vba-core/Conditions - Case Statements.bas index 38d17ae..3b69936 100644 --- a/vba/excel-vba/core-concepts/Case Statements.bas +++ b/vba/vba-core/Conditions - Case Statements.bas @@ -1,209 +1,209 @@ -Attribute VB_Name = "Module1" -Option Explicit - -Sub CaseStatements() - - 'Declare Variable - Dim DayOfWeek As String - - 'Select the starting cell - ActiveSheet.Range("B3").Select - - 'Create a do while loop that will loop through the range of cells. - Do While ActiveCell.Value <> "" - - 'Set my variable equal to active cell value on each iteration of the loop - DayOfWeek = ActiveCell.Value - - 'Create the case statement - Select Case DayOfWeek - - Case "monday" - ActiveCell.Offset(0, 1).Value = "Good" - - Case "Tuesday" - ActiveCell.Offset(0, 1).Value = "Good" - - Case "Wednesday" - ActiveCell.Offset(0, 1).Value = "Good" - - Case "Thursday" - ActiveCell.Offset(0, 1).Value = "Bad" - - Case "Friday" - ActiveCell.Offset(0, 1).Value = "Bad" - - Case "Saturday" - ActiveCell.Offset(0, 1).Value = "Good" - - Case "Sunday" - ActiveCell.Offset(0, 1).Value = "Neutral" - - End Select - - 'GO TO THE NEXT CELL --- VERY IMPORTANT - ActiveCell.Offset(1, 0).Select - - Loop - -End Sub - -Sub CaseStatements_Operator() - - 'Declare Variable - Dim DayOfWeek As String - - 'Select the starting cell - ActiveSheet.Range("B3").Select - - 'Create a do while loop that will loop through the range of cells. - Do While ActiveCell.Value <> "" - - 'Set my variable equal to active cell value on each iteration of the loop - DayOfWeek = ActiveCell.Value - - 'Create the case statement - Select Case DayOfWeek - - Case "Monday", "Tuesday", "Wednesday", "Saturday" - ActiveCell.Offset(0, 1).Value = "Good" - - Case "Thursday", "Friday" - ActiveCell.Offset(0, 1).Value = "Bad" - - Case "Sunday" - ActiveCell.Offset(0, 1).Value = "Neutral" - - End Select - - 'GO TO THE NEXT CELL --- VERY IMPORTANT - ActiveCell.Offset(1, 0).Select - - Loop - -End Sub - - -Sub CaseStatements_Else() - - 'Declare Variable - Dim DayOfWeek As String - - 'Select the starting cell - ActiveSheet.Range("B3").Select - - 'Create a do while loop that will loop through the range of cells. - Do While ActiveCell.Value <> "" - - 'Set my variable equal to active cell value on each iteration of the loop - DayOfWeek = ActiveCell.Value - - 'Create the case statement - Select Case DayOfWeek - - Case "Monday", "Tuesday", "Wednesday", "Saturday" - ActiveCell.Offset(0, 1).Value = "Good" - - Case "Thursday", "Friday" - ActiveCell.Offset(0, 1).Value = "Bad" - - Case "Sunday" - ActiveCell.Offset(0, 1).Value = "Neutral" - - Case Else - ActiveCell.Offset(0, 1).Value = "You Messed Up Big Time" - - End Select - - 'GO TO THE NEXT CELL --- VERY IMPORTANT - ActiveCell.Offset(1, 0).Select - - Loop - -End Sub - - -Sub CaseStatements_Range() - - 'We use IS keyword with comparison operators - 'We use TO keyword with a range of values - - 'Declare Variable - Dim DayOfWeek As String - Dim DayScore As Variant - - 'Select the starting cell - ActiveSheet.Range("D3").Select - - 'Create a do while loop that will loop through the range of cells. - Do While ActiveCell.Value <> "" - - 'Set my variable equal to active cell value on each iteration of the loop - DayScore = ActiveCell.Value - - 'Create the case statement - Select Case DayScore - - Case Is > 90 - ActiveCell.Offset(0, 1).Value = "A" - - Case 79 To 90 - ActiveCell.Offset(0, 1).Value = "B" - - Case 69 To 78 - ActiveCell.Offset(0, 1).Value = "C" - - Case 59 To 68 - ActiveCell.Offset(0, 1).Value = "D" - - Case Is < 58 - ActiveCell.Offset(0, 1).Value = "F" - - Case Else - ActiveCell.Offset(0, 1).Value = "You Messed Up Big Time" - - End Select - - 'GO TO THE NEXT CELL --- VERY IMPORTANT - ActiveCell.Offset(1, 0).Select - - Loop - -End Sub - - -Sub CaseStatements_Strings() - - 'Declare Variable - Dim DayOfWeek As String - - 'Select the starting cell - ActiveSheet.Range("B3").Select - - 'Create a do while loop that will loop through the range of cells. - Do While ActiveCell.Value <> "" - - 'Set my variable equal to active cell value on each iteration of the loop - DayOfWeek = ActiveCell.Value - - 'Create the case statement - Select Case DayOfWeek - - 'Any value that falls within the alphabetical range - Case "Monday" To "Saturday" - ActiveCell.Offset(0, 1).Value = "Good" - - Case "Sunday" - ActiveCell.Offset(0, 1).Value = "Ok Good" - - Case Else - ActiveCell.Offset(0, 1).Value = "You Messed Up Big Time" - - End Select - - 'GO TO THE NEXT CELL --- VERY IMPORTANT - ActiveCell.Offset(1, 0).Select - - Loop - -End Sub +Attribute VB_Name = "Module1" +Option Explicit + +Sub CaseStatements() + + 'Declare Variable + Dim DayOfWeek As String + + 'Select the starting cell + ActiveSheet.Range("B3").Select + + 'Create a do while loop that will loop through the range of cells. + Do While ActiveCell.Value <> "" + + 'Set my variable equal to active cell value on each iteration of the loop + DayOfWeek = ActiveCell.Value + + 'Create the case statement + Select Case DayOfWeek + + Case "monday" + ActiveCell.Offset(0, 1).Value = "Good" + + Case "Tuesday" + ActiveCell.Offset(0, 1).Value = "Good" + + Case "Wednesday" + ActiveCell.Offset(0, 1).Value = "Good" + + Case "Thursday" + ActiveCell.Offset(0, 1).Value = "Bad" + + Case "Friday" + ActiveCell.Offset(0, 1).Value = "Bad" + + Case "Saturday" + ActiveCell.Offset(0, 1).Value = "Good" + + Case "Sunday" + ActiveCell.Offset(0, 1).Value = "Neutral" + + End Select + + 'GO TO THE NEXT CELL --- VERY IMPORTANT + ActiveCell.Offset(1, 0).Select + + Loop + +End Sub + +Sub CaseStatements_Operator() + + 'Declare Variable + Dim DayOfWeek As String + + 'Select the starting cell + ActiveSheet.Range("B3").Select + + 'Create a do while loop that will loop through the range of cells. + Do While ActiveCell.Value <> "" + + 'Set my variable equal to active cell value on each iteration of the loop + DayOfWeek = ActiveCell.Value + + 'Create the case statement + Select Case DayOfWeek + + Case "Monday", "Tuesday", "Wednesday", "Saturday" + ActiveCell.Offset(0, 1).Value = "Good" + + Case "Thursday", "Friday" + ActiveCell.Offset(0, 1).Value = "Bad" + + Case "Sunday" + ActiveCell.Offset(0, 1).Value = "Neutral" + + End Select + + 'GO TO THE NEXT CELL --- VERY IMPORTANT + ActiveCell.Offset(1, 0).Select + + Loop + +End Sub + + +Sub CaseStatements_Else() + + 'Declare Variable + Dim DayOfWeek As String + + 'Select the starting cell + ActiveSheet.Range("B3").Select + + 'Create a do while loop that will loop through the range of cells. + Do While ActiveCell.Value <> "" + + 'Set my variable equal to active cell value on each iteration of the loop + DayOfWeek = ActiveCell.Value + + 'Create the case statement + Select Case DayOfWeek + + Case "Monday", "Tuesday", "Wednesday", "Saturday" + ActiveCell.Offset(0, 1).Value = "Good" + + Case "Thursday", "Friday" + ActiveCell.Offset(0, 1).Value = "Bad" + + Case "Sunday" + ActiveCell.Offset(0, 1).Value = "Neutral" + + Case Else + ActiveCell.Offset(0, 1).Value = "You Messed Up Big Time" + + End Select + + 'GO TO THE NEXT CELL --- VERY IMPORTANT + ActiveCell.Offset(1, 0).Select + + Loop + +End Sub + + +Sub CaseStatements_Range() + + 'We use IS keyword with comparison operators + 'We use TO keyword with a range of values + + 'Declare Variable + Dim DayOfWeek As String + Dim DayScore As Variant + + 'Select the starting cell + ActiveSheet.Range("D3").Select + + 'Create a do while loop that will loop through the range of cells. + Do While ActiveCell.Value <> "" + + 'Set my variable equal to active cell value on each iteration of the loop + DayScore = ActiveCell.Value + + 'Create the case statement + Select Case DayScore + + Case Is > 90 + ActiveCell.Offset(0, 1).Value = "A" + + Case 79 To 90 + ActiveCell.Offset(0, 1).Value = "B" + + Case 69 To 78 + ActiveCell.Offset(0, 1).Value = "C" + + Case 59 To 68 + ActiveCell.Offset(0, 1).Value = "D" + + Case Is < 58 + ActiveCell.Offset(0, 1).Value = "F" + + Case Else + ActiveCell.Offset(0, 1).Value = "You Messed Up Big Time" + + End Select + + 'GO TO THE NEXT CELL --- VERY IMPORTANT + ActiveCell.Offset(1, 0).Select + + Loop + +End Sub + + +Sub CaseStatements_Strings() + + 'Declare Variable + Dim DayOfWeek As String + + 'Select the starting cell + ActiveSheet.Range("B3").Select + + 'Create a do while loop that will loop through the range of cells. + Do While ActiveCell.Value <> "" + + 'Set my variable equal to active cell value on each iteration of the loop + DayOfWeek = ActiveCell.Value + + 'Create the case statement + Select Case DayOfWeek + + 'Any value that falls within the alphabetical range + Case "Monday" To "Saturday" + ActiveCell.Offset(0, 1).Value = "Good" + + Case "Sunday" + ActiveCell.Offset(0, 1).Value = "Ok Good" + + Case Else + ActiveCell.Offset(0, 1).Value = "You Messed Up Big Time" + + End Select + + 'GO TO THE NEXT CELL --- VERY IMPORTANT + ActiveCell.Offset(1, 0).Select + + Loop + +End Sub diff --git a/vba/excel-vba/core-concepts/If Statements.bas b/vba/vba-core/Conditions - If Statements.bas similarity index 95% rename from vba/excel-vba/core-concepts/If Statements.bas rename to vba/vba-core/Conditions - If Statements.bas index b987071..fc871fc 100644 --- a/vba/excel-vba/core-concepts/If Statements.bas +++ b/vba/vba-core/Conditions - If Statements.bas @@ -1,166 +1,166 @@ -Sub IfThen() - - 'Declare a variable that will house the test score. - Dim TestScore As Integer - - 'Set the variable equal the value of cell "C3". - TestScore = Range("C3").Value - - 'Begin if statement - If TestScore = 75 Then - Range("D3").Value = "C" - End If - -End Sub - -Sub IfThenElse() - - 'Declare a variable that will house the test score. - Dim TestScore As Integer - - 'Set the variable equal the value of cell "C3". - TestScore = Range("C3").Value - - 'Begin if statement - If TestScore = 75 Then - Range("D3").Value = "C" - Else - Range("D3").Value = "No Score Provided" - End If - -End Sub - -Sub IfThenElseIfElse() - - 'Declare a variable that will house the test score. - Dim TestScore As Integer - - 'Set the variable equal the value of cell "C3". - TestScore = Range("C3").Value - - 'Begin if statement - If TestScore = 75 Then - Range("D3").Value = "C" - - ElseIf TestScore = 85 Then - Range("D3").Value = "B" - - Else - Range("D3").Value = "No Score Provided" - End If - -End Sub - -Sub NestedIfStatements() - - 'Declare a variable that will house the test score & Favorite Color. - Dim TestScore As Integer - Dim FavrColor As String - - 'Store values in variables - TestScore = Range("H3").Value - FavrColor = Range("G3").Value - - 'Begin if statement - If TestScore = 75 Then - - 'Nested If Statement - If FavrColor = "Blue" Then - Range("I3").Value = "Great" - Else - Range("I3").Value = "Wonderful" - End If - - ElseIf TestScore = 85 Then - - 'Nested If Statement - If FavrColor = "Red" Then - Range("I3").Value = "Not Great" - Else - Range("I3").Value = "Not Wonderful" - End If - - Else - Range("I3").Value = "No Score Provided" - End If - -End Sub - -Sub IfStatementsWithLogicalOperators() - - 'Declare a variable that will house the test score & Favorite Color. - Dim TestScore As Integer - Dim FavrColor As String - - 'Store values in variables - TestScore = Range("H3").Value - FavrColor = Range("G3").Value - - 'Begin if statement - If TestScore = 75 And FavrColor = "Blue" Then - Range("I3").Value = "Great" - - 'ElseIf Section One - ElseIf TestScore = 75 And FavrColor = "Red" Then - Range("I3").Value = "Wonderful" - - 'ElseIf Section Two - ElseIf TestScore = 85 And FavrColor = "Blue" Then - Range("I3").Value = "Not Great" - - 'ElseIf Section Three - ElseIf TestScore = 85 And FavrColor = "Red" Then - Range("I3").Value = "Not Wonderful" - - 'Else Section - Else - Range("I3").Value = "No Score Provided" - - 'Close If Block - End If - -End Sub - -Sub WrongIfStatement() - - 'Declare a variable that will house the test score & Favorite Color. - Dim TestScore As Integer - - 'Store values in variables - TestScore = Range("H3").Value - - 'This is incorrect because the Else If will never be reached. - If TestScore >= 75 Then - Range("I3").Value = "Great" - - ElseIf TestScore >= 85 Then - 'This Portion of the code would never be reached. - Range("I3").Value = "Wonderful" - - End If - -End Sub - -Sub UsingProperties() - - 'Declare a variable that will house the test score & Favorite Color. - Dim Rng As Range - - 'Store values in variables - Set Rng = Range("H3:H5") - - 'This is incorrect because the Else If will never be reached. - If Rng.Count = 1 Then - MsgBox "You have one cell!" - - ElseIf Rng.Count > 1 Then - 'This Portion of the code would never be reached. - MsgBox "You have more than one cell!" - - Else - 'This Portion of the code would never be reached. - MsgBox "Make sure to select a range in order to use this macro." - - End If - -End Sub +Sub IfThen() + + 'Declare a variable that will house the test score. + Dim TestScore As Integer + + 'Set the variable equal the value of cell "C3". + TestScore = Range("C3").Value + + 'Begin if statement + If TestScore = 75 Then + Range("D3").Value = "C" + End If + +End Sub + +Sub IfThenElse() + + 'Declare a variable that will house the test score. + Dim TestScore As Integer + + 'Set the variable equal the value of cell "C3". + TestScore = Range("C3").Value + + 'Begin if statement + If TestScore = 75 Then + Range("D3").Value = "C" + Else + Range("D3").Value = "No Score Provided" + End If + +End Sub + +Sub IfThenElseIfElse() + + 'Declare a variable that will house the test score. + Dim TestScore As Integer + + 'Set the variable equal the value of cell "C3". + TestScore = Range("C3").Value + + 'Begin if statement + If TestScore = 75 Then + Range("D3").Value = "C" + + ElseIf TestScore = 85 Then + Range("D3").Value = "B" + + Else + Range("D3").Value = "No Score Provided" + End If + +End Sub + +Sub NestedIfStatements() + + 'Declare a variable that will house the test score & Favorite Color. + Dim TestScore As Integer + Dim FavrColor As String + + 'Store values in variables + TestScore = Range("H3").Value + FavrColor = Range("G3").Value + + 'Begin if statement + If TestScore = 75 Then + + 'Nested If Statement + If FavrColor = "Blue" Then + Range("I3").Value = "Great" + Else + Range("I3").Value = "Wonderful" + End If + + ElseIf TestScore = 85 Then + + 'Nested If Statement + If FavrColor = "Red" Then + Range("I3").Value = "Not Great" + Else + Range("I3").Value = "Not Wonderful" + End If + + Else + Range("I3").Value = "No Score Provided" + End If + +End Sub + +Sub IfStatementsWithLogicalOperators() + + 'Declare a variable that will house the test score & Favorite Color. + Dim TestScore As Integer + Dim FavrColor As String + + 'Store values in variables + TestScore = Range("H3").Value + FavrColor = Range("G3").Value + + 'Begin if statement + If TestScore = 75 And FavrColor = "Blue" Then + Range("I3").Value = "Great" + + 'ElseIf Section One + ElseIf TestScore = 75 And FavrColor = "Red" Then + Range("I3").Value = "Wonderful" + + 'ElseIf Section Two + ElseIf TestScore = 85 And FavrColor = "Blue" Then + Range("I3").Value = "Not Great" + + 'ElseIf Section Three + ElseIf TestScore = 85 And FavrColor = "Red" Then + Range("I3").Value = "Not Wonderful" + + 'Else Section + Else + Range("I3").Value = "No Score Provided" + + 'Close If Block + End If + +End Sub + +Sub WrongIfStatement() + + 'Declare a variable that will house the test score & Favorite Color. + Dim TestScore As Integer + + 'Store values in variables + TestScore = Range("H3").Value + + 'This is incorrect because the Else If will never be reached. + If TestScore >= 75 Then + Range("I3").Value = "Great" + + ElseIf TestScore >= 85 Then + 'This Portion of the code would never be reached. + Range("I3").Value = "Wonderful" + + End If + +End Sub + +Sub UsingProperties() + + 'Declare a variable that will house the test score & Favorite Color. + Dim Rng As Range + + 'Store values in variables + Set Rng = Range("H3:H5") + + 'This is incorrect because the Else If will never be reached. + If Rng.Count = 1 Then + MsgBox "You have one cell!" + + ElseIf Rng.Count > 1 Then + 'This Portion of the code would never be reached. + MsgBox "You have more than one cell!" + + Else + 'This Portion of the code would never be reached. + MsgBox "Make sure to select a range in order to use this macro." + + End If + +End Sub diff --git a/vba/excel-vba/core-concepts/Data Types.bas b/vba/vba-core/Data Types - All.bas similarity index 95% rename from vba/excel-vba/core-concepts/Data Types.bas rename to vba/vba-core/Data Types - All.bas index a201f6e..e57225c 100644 --- a/vba/excel-vba/core-concepts/Data Types.bas +++ b/vba/vba-core/Data Types - All.bas @@ -1,224 +1,224 @@ -Attribute VB_Name = "DataTypes" -Sub DataTypes() - - 'Name: Variant - 'Allocation: 16 to 22 bytes - 'Range: N/A - - 'Declare Variables with Variant Data Type - Dim EmptyValue As Variant - Dim ErrorValue As Variant - Dim NothingValue As Variant - Dim NullValue As Variant - - 'This means that no value has been assigned to the variable. - EmptyValue = Empty - - 'Error help us for identifying errors in our procedure. - ErrorValue = Error - - 'Nothing is the uninitialized state of an object variable. - Set NothingValue = Nothing - - 'This indicates that the variable is absent of data. - NullValue = Null - -End Sub - -Sub ByteDataType() - - 'Name: Byte - 'Allocation: 1 Bytes - 'Range: 0 to 255 - - Dim ByteValue As Byte - ByteValue = 100 - -End Sub - -Sub BooleanDataType() - - 'Name: Boolean - 'Allocation: 2 Bytes - 'Range: True or False - - Dim BooleanValue As Boolean - BooleanValue = True - BooleanValue = False - -End Sub - - -Sub CurrencyDataType() - - 'Name: Currency - 'Allocation: 8 Bytes - 'Range: -922,337,203,685,477.5808 and 922,337,203,685,477.5807 - - Dim CurrencyValue As Currency - CurrencyValue = 200000000 - - 'Using Character Type Method - CurrencyValue2@ = 200000000 - -End Sub - -Sub DateDataType() - - 'Name: Date - 'Allocation: 8 Bytes - 'Range Dates: Dates between January 1, 100 and December 31, 9999 - 'Range Times: Times between midnight (00:00:00) and 23:59:59 - - Dim DateValue As Date - DateValueSerial = 43435 '<<< This is 12/1/2018 - DateValueLiteral = #12/1/2018# - - TimeValueSerial = 0.54 '<<< This is 1:00:00PM - TimeValueLiteral = #1:00:00 PM# - - DateTimeValueSerial = 43435.54 '<<< This is 12/1/2018 1:00:00 PM - DateTimeValueLiteral = #12/1/2018 1:00:00 PM# - - DateValueSerialNeg = -1 '<<< This is 12/30/1899 - -End Sub - -Sub DecimalDataType() - - 'Name: Decimal - 'Allocation: 14 Byte - 'Range: +/-79,228,162,514,264,337,593,543,950,335 with no decial point / +/-7.9228162514264337593543950335 with 28 places to the right of the decimal - - Dim DeciVal As Variant - DeciVal = 1.15 - DeciVal = CDec(DeciVal) '<<< HAVE TO CONVERT TO DECIMAL - -End Sub - - -Sub DoubleDataType() - - 'Name: Double - 'Allocation: 8 Byte - 'Range: -1.79769313486231E308 to -4.94065645841247E-324 for negative numbers / 4.94065645841247E-324 to 1.79769313486232E308 for positive numbers - - Dim DoubleVal As Double - DoubleVal = 5.5 - - 'Using Character Type Method - DoubleVal# = -5.5 - -End Sub - -Sub IntegerDataType() - - 'Name: Integer - 'Allocation: 2 Byte - 'Range: -32,768 to 32,767 - - Dim IntVal As Integer - IntVal = 100 - - 'Using Character Type Method - IntVal% = -100 - -End Sub - -Sub LongDataType() - - 'Name: Long - 'Allocation: 4 Byte - 'Range: -2,147,483,648 and 2,147,483,647 - - Dim LongVal As Long - LongVal = 2000000 - - 'Using Character Type Method - LongVal& = -20000000 - -End Sub - -Sub LongLongDataType() - - 'Name: LongLong <<< ONLY VALID ON 64-BIT PLATFORMS - 'Allocation: 8 Byte - 'Range: -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 - - Dim LngLngVal As LongLong - LngLngVal = -10000000000# - LngLngVal = 10000000000# - -End Sub - -Sub LongPtrDataType() - - 'Name: LongPtr <<< CHANGES DEPENDING ON THE PLATFORM - 'Allocation: 8 Byte - 'Range: -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 - - Dim LngPtrVal As LongPtr - LngPtrVal = 1000000 '<<< 32 Bit Version Platform it becomes Long Data Type - LngPtrVal = 1000000 '<<< 64 Bit Version Platform it becomes LongLong Data Type - -End Sub - - -Sub ObjectDataType() - - 'Name: Object - 'Allocation: 4 Byte - 'Range: N/A - - Dim Rng As Object - Set Rng = Range("A1:A4") - -End Sub - - -Sub SingleDataType() - - 'Name: Single - 'Allocation: 4 Byte - 'Range: -3.402823E38 to -1.401298E-45 / 1.401298E-45 to 3.402823E38 - - Dim SingVal As Single - SingVal = -1.4 - - 'Using Character Type Method - SingVal! = 1.4 - -End Sub - - -Sub StringDataType() - - 'Name: String Variable / String Fixed - 'Allocation: 10 Byte + length of string / Length of String - 'Range: 0 to approximately 2 billion characters / 1 to approximately 65,400 - - Dim StrVal As String - StrVal = "Hello" - - 'Using Character Type Method - StrVal$ = "10" - -End Sub - - -Sub UserDefinedDataType() - - 'Name: User-Defined Types - 'Allocation: Varies - 'Range: Varies - - Type aType - Field1 As String - Field2 As Integer - Field3 As Boolean - End Type - - '("Hello", 10, True) - -End Sub - +Attribute VB_Name = "DataTypes" +Sub DataTypes() + + 'Name: Variant + 'Allocation: 16 to 22 bytes + 'Range: N/A + + 'Declare Variables with Variant Data Type + Dim EmptyValue As Variant + Dim ErrorValue As Variant + Dim NothingValue As Variant + Dim NullValue As Variant + + 'This means that no value has been assigned to the variable. + EmptyValue = Empty + + 'Error help us for identifying errors in our procedure. + ErrorValue = Error + + 'Nothing is the uninitialized state of an object variable. + Set NothingValue = Nothing + + 'This indicates that the variable is absent of data. + NullValue = Null + +End Sub + +Sub ByteDataType() + + 'Name: Byte + 'Allocation: 1 Bytes + 'Range: 0 to 255 + + Dim ByteValue As Byte + ByteValue = 100 + +End Sub + +Sub BooleanDataType() + + 'Name: Boolean + 'Allocation: 2 Bytes + 'Range: True or False + + Dim BooleanValue As Boolean + BooleanValue = True + BooleanValue = False + +End Sub + + +Sub CurrencyDataType() + + 'Name: Currency + 'Allocation: 8 Bytes + 'Range: -922,337,203,685,477.5808 and 922,337,203,685,477.5807 + + Dim CurrencyValue As Currency + CurrencyValue = 200000000 + + 'Using Character Type Method + CurrencyValue2@ = 200000000 + +End Sub + +Sub DateDataType() + + 'Name: Date + 'Allocation: 8 Bytes + 'Range Dates: Dates between January 1, 100 and December 31, 9999 + 'Range Times: Times between midnight (00:00:00) and 23:59:59 + + Dim DateValue As Date + DateValueSerial = 43435 '<<< This is 12/1/2018 + DateValueLiteral = #12/1/2018# + + TimeValueSerial = 0.54 '<<< This is 1:00:00PM + TimeValueLiteral = #1:00:00 PM# + + DateTimeValueSerial = 43435.54 '<<< This is 12/1/2018 1:00:00 PM + DateTimeValueLiteral = #12/1/2018 1:00:00 PM# + + DateValueSerialNeg = -1 '<<< This is 12/30/1899 + +End Sub + +Sub DecimalDataType() + + 'Name: Decimal + 'Allocation: 14 Byte + 'Range: +/-79,228,162,514,264,337,593,543,950,335 with no decial point / +/-7.9228162514264337593543950335 with 28 places to the right of the decimal + + Dim DeciVal As Variant + DeciVal = 1.15 + DeciVal = CDec(DeciVal) '<<< HAVE TO CONVERT TO DECIMAL + +End Sub + + +Sub DoubleDataType() + + 'Name: Double + 'Allocation: 8 Byte + 'Range: -1.79769313486231E308 to -4.94065645841247E-324 for negative numbers / 4.94065645841247E-324 to 1.79769313486232E308 for positive numbers + + Dim DoubleVal As Double + DoubleVal = 5.5 + + 'Using Character Type Method + DoubleVal# = -5.5 + +End Sub + +Sub IntegerDataType() + + 'Name: Integer + 'Allocation: 2 Byte + 'Range: -32,768 to 32,767 + + Dim IntVal As Integer + IntVal = 100 + + 'Using Character Type Method + IntVal% = -100 + +End Sub + +Sub LongDataType() + + 'Name: Long + 'Allocation: 4 Byte + 'Range: -2,147,483,648 and 2,147,483,647 + + Dim LongVal As Long + LongVal = 2000000 + + 'Using Character Type Method + LongVal& = -20000000 + +End Sub + +Sub LongLongDataType() + + 'Name: LongLong <<< ONLY VALID ON 64-BIT PLATFORMS + 'Allocation: 8 Byte + 'Range: -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 + + Dim LngLngVal As LongLong + LngLngVal = -10000000000# + LngLngVal = 10000000000# + +End Sub + +Sub LongPtrDataType() + + 'Name: LongPtr <<< CHANGES DEPENDING ON THE PLATFORM + 'Allocation: 8 Byte + 'Range: -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 + + Dim LngPtrVal As LongPtr + LngPtrVal = 1000000 '<<< 32 Bit Version Platform it becomes Long Data Type + LngPtrVal = 1000000 '<<< 64 Bit Version Platform it becomes LongLong Data Type + +End Sub + + +Sub ObjectDataType() + + 'Name: Object + 'Allocation: 4 Byte + 'Range: N/A + + Dim Rng As Object + Set Rng = Range("A1:A4") + +End Sub + + +Sub SingleDataType() + + 'Name: Single + 'Allocation: 4 Byte + 'Range: -3.402823E38 to -1.401298E-45 / 1.401298E-45 to 3.402823E38 + + Dim SingVal As Single + SingVal = -1.4 + + 'Using Character Type Method + SingVal! = 1.4 + +End Sub + + +Sub StringDataType() + + 'Name: String Variable / String Fixed + 'Allocation: 10 Byte + length of string / Length of String + 'Range: 0 to approximately 2 billion characters / 1 to approximately 65,400 + + Dim StrVal As String + StrVal = "Hello" + + 'Using Character Type Method + StrVal$ = "10" + +End Sub + + +Sub UserDefinedDataType() + + 'Name: User-Defined Types + 'Allocation: Varies + 'Range: Varies + + Type aType + Field1 As String + Field2 As Integer + Field3 As Boolean + End Type + + '("Hello", 10, True) + +End Sub + diff --git a/vba/excel-vba/core-concepts/Working With Arrays.bas b/vba/vba-core/Data Types - Arrays.bas similarity index 95% rename from vba/excel-vba/core-concepts/Working With Arrays.bas rename to vba/vba-core/Data Types - Arrays.bas index e52fb12..3cbeac4 100644 --- a/vba/excel-vba/core-concepts/Working With Arrays.bas +++ b/vba/vba-core/Data Types - Arrays.bas @@ -1,94 +1,94 @@ -Attribute VB_Name = "Arrays" -Sub DeclaringArrays() - -'Declare Array with range 0,1,2,3 -Dim MyArray(0 To 3) As Variant - -'Declare Array with range 0,1,2,3 -Dim MyArray(3) As Variant - -'Declare Array with range 1,2,3 -Dim MyArray(1 To 3) As Variant - -'Declare Array with range 2,3,4 -Dim MyArray(2 To 4) As Variant - -'DYNAMIC ARRAYS - -'Declare Array with Dynamic Range -Dim MyArray() As Variant - -'Resize Array with range 0,1,2,3,4 -ReDim MyArray(0 To 4) - -'ASSIGN VALUES TO AN ARRAY - -MyArray(0) = 100 -MyArray(1) = 200 -MyArray(2) = 300 -MyArray(3) = 400 -MyArray(4) = 500 - -MyArray(5) = 600 '<<< Will Return an error because there is not 5th element. - -'LOOP THROUGH ARRAYS - -'Using For Loop -Dim i As Long -For i = LBound(MyArray) To UBound(MyArray) - Debug.Print MyArray(i) -Next - -'Using For Each Loop -Dim Elem As Variant -For Each Elem In MyArray - Debug.Print Elem -Next - -'USE ERASE - -'Declare Static Array -Dim MyArray(0 To 3) As Long -Erase MyArray '<<< All Values will be set to 0. - -'Declare Dynamic Array -Dim MyArray() As Long -ReDim MyArray(0 To 3) -Erase MyArray '<<< Array is erased from memory. - -'USE REDIM - -Dim MyArray() As Variant -MyArray(0) = "MyFirstElement" - -'Old Array with "MyFirstElement" is now deleted. -ReDim MyArray(0 To 4) - - -Dim MyArray() As Variant -MyArray(0) = "MyFirstElement" - -'Old Array with "MyFirstElement" is now Resized With Original Content Kept in Place. -ReDim Preserve MyArray(0 To 4) - -'USING MULTIDIMENSIONAL ARRAYS - -'Declare two dimensional array -Dim MultiDimArray(0 To 3, 0 To 3) As Integer -Dim i, j As Integer - -'Assign values to array -For i = LBound(MultiDimArray, 1) To UBound(MultiDimArray, 1) - For j = LBound(MultiDimArray, 2) To UBound(MultiDimArray, 2) - MultiDimArray(i, j) = i + j - Next j -Next i - -'Print values from array. -For i = LBound(MultiDimArray, 1) To UBound(MultiDimArray, 1) - For j = LBound(MultiDimArray, 2) To UBound(MultiDimArray, 2) - Debug.Print MultiDimArray(i, j) - Next j -Next i - -End Sub +Attribute VB_Name = "Arrays" +Sub DeclaringArrays() + +'Declare Array with range 0,1,2,3 +Dim MyArray(0 To 3) As Variant + +'Declare Array with range 0,1,2,3 +Dim MyArray(3) As Variant + +'Declare Array with range 1,2,3 +Dim MyArray(1 To 3) As Variant + +'Declare Array with range 2,3,4 +Dim MyArray(2 To 4) As Variant + +'DYNAMIC ARRAYS + +'Declare Array with Dynamic Range +Dim MyArray() As Variant + +'Resize Array with range 0,1,2,3,4 +ReDim MyArray(0 To 4) + +'ASSIGN VALUES TO AN ARRAY + +MyArray(0) = 100 +MyArray(1) = 200 +MyArray(2) = 300 +MyArray(3) = 400 +MyArray(4) = 500 + +MyArray(5) = 600 '<<< Will Return an error because there is not 5th element. + +'LOOP THROUGH ARRAYS + +'Using For Loop +Dim i As Long +For i = LBound(MyArray) To UBound(MyArray) + Debug.Print MyArray(i) +Next + +'Using For Each Loop +Dim Elem As Variant +For Each Elem In MyArray + Debug.Print Elem +Next + +'USE ERASE + +'Declare Static Array +Dim MyArray(0 To 3) As Long +Erase MyArray '<<< All Values will be set to 0. + +'Declare Dynamic Array +Dim MyArray() As Long +ReDim MyArray(0 To 3) +Erase MyArray '<<< Array is erased from memory. + +'USE REDIM + +Dim MyArray() As Variant +MyArray(0) = "MyFirstElement" + +'Old Array with "MyFirstElement" is now deleted. +ReDim MyArray(0 To 4) + + +Dim MyArray() As Variant +MyArray(0) = "MyFirstElement" + +'Old Array with "MyFirstElement" is now Resized With Original Content Kept in Place. +ReDim Preserve MyArray(0 To 4) + +'USING MULTIDIMENSIONAL ARRAYS + +'Declare two dimensional array +Dim MultiDimArray(0 To 3, 0 To 3) As Integer +Dim i, j As Integer + +'Assign values to array +For i = LBound(MultiDimArray, 1) To UBound(MultiDimArray, 1) + For j = LBound(MultiDimArray, 2) To UBound(MultiDimArray, 2) + MultiDimArray(i, j) = i + j + Next j +Next i + +'Print values from array. +For i = LBound(MultiDimArray, 1) To UBound(MultiDimArray, 1) + For j = LBound(MultiDimArray, 2) To UBound(MultiDimArray, 2) + Debug.Print MultiDimArray(i, j) + Next j +Next i + +End Sub diff --git a/vba/excel-vba/core-concepts/Late And Early Binding.bas b/vba/vba-core/Data Types - Late Vs Early Binding.bas similarity index 96% rename from vba/excel-vba/core-concepts/Late And Early Binding.bas rename to vba/vba-core/Data Types - Late Vs Early Binding.bas index dd908a8..97d8ac9 100644 --- a/vba/excel-vba/core-concepts/Late And Early Binding.bas +++ b/vba/vba-core/Data Types - Late Vs Early Binding.bas @@ -1,66 +1,66 @@ -Sub EarlyBinding() - - 'Early Binding has several advantages. - 'We can use intellisense to help write our code, this is because the Object model is known. - 'The developer can also compile the code to assure there are no syntax errors. - 'Early binding runs a little faster than late binding. - - 'Here we are using early binding - We define the object types early on in the code. - Dim PPTApp As PowerPoint.Application - Dim PPTPres As PowerPoint.Presentation - Dim PPTSlide As PowerPoint.Slide - Dim ExcRng As Range - - 'Create a new instance of PowerPoint - Set PPTApp = New PowerPoint.Application - PPTApp.Visible = True - - 'Create a new Presentation - Set PPTPres = PPTApp.Presentations.Add - - 'Create a new Slide - Set PPTSlide = PPTPres.Slides.Add(1, ppLayoutblank) - - 'Set a reference to the range - Set ExcRng = Range("A1:C5") - - 'Copy Range - ExcRng.Copy - - 'Create another slide - Set PPTSlide = PPTPres.Slides.Add(2, ppLayoutTitleOnly) - PPTSlide.Shapes.PasteSpecial DataType:=ppPasteOLEObject, Link:=msoTrue - -End Sub - -Sub LateBinding() - - 'Here we are using late binding - We simply define the data type as general objects. - Dim PPTApp As Object - Dim PPTPres As Object - Dim PPTSlide As Object - Dim ExcRng As Object - - 'Create a new instance of PowerPoint - Set PPTApp = CreateObject("PowerPoint.Application") - PPTApp.Visible = True - - 'Create a new Presentation - Set PPTPres = PPTApp.Presentations.Add - - 'Create a new Slide - Set PPTSlide = PPTPres.Slides.Add(1, 1) - - 'Set a reference to the range - Set ExcRng = Range("A1:C5") - - 'Copy Range - ExcRng.Copy - - 'Create another slide - Set PPTSlide = PPTPres.Slides.Add(2, 11) - - 'Paste the range in the slide - PPTSlide.Shapes.PasteSpecial DataType:=10 - -End Sub +Sub EarlyBinding() + + 'Early Binding has several advantages. + 'We can use intellisense to help write our code, this is because the Object model is known. + 'The developer can also compile the code to assure there are no syntax errors. + 'Early binding runs a little faster than late binding. + + 'Here we are using early binding - We define the object types early on in the code. + Dim PPTApp As PowerPoint.Application + Dim PPTPres As PowerPoint.Presentation + Dim PPTSlide As PowerPoint.Slide + Dim ExcRng As Range + + 'Create a new instance of PowerPoint + Set PPTApp = New PowerPoint.Application + PPTApp.Visible = True + + 'Create a new Presentation + Set PPTPres = PPTApp.Presentations.Add + + 'Create a new Slide + Set PPTSlide = PPTPres.Slides.Add(1, ppLayoutblank) + + 'Set a reference to the range + Set ExcRng = Range("A1:C5") + + 'Copy Range + ExcRng.Copy + + 'Create another slide + Set PPTSlide = PPTPres.Slides.Add(2, ppLayoutTitleOnly) + PPTSlide.Shapes.PasteSpecial DataType:=ppPasteOLEObject, Link:=msoTrue + +End Sub + +Sub LateBinding() + + 'Here we are using late binding - We simply define the data type as general objects. + Dim PPTApp As Object + Dim PPTPres As Object + Dim PPTSlide As Object + Dim ExcRng As Object + + 'Create a new instance of PowerPoint + Set PPTApp = CreateObject("PowerPoint.Application") + PPTApp.Visible = True + + 'Create a new Presentation + Set PPTPres = PPTApp.Presentations.Add + + 'Create a new Slide + Set PPTSlide = PPTPres.Slides.Add(1, 1) + + 'Set a reference to the range + Set ExcRng = Range("A1:C5") + + 'Copy Range + ExcRng.Copy + + 'Create another slide + Set PPTSlide = PPTPres.Slides.Add(2, 11) + + 'Paste the range in the slide + PPTSlide.Shapes.PasteSpecial DataType:=10 + +End Sub diff --git a/vba/excel-vba/core-concepts/For Each Loop.bas b/vba/vba-core/Loops - For Each.bas similarity index 95% rename from vba/excel-vba/core-concepts/For Each Loop.bas rename to vba/vba-core/Loops - For Each.bas index b555ac1..c8b9606 100644 --- a/vba/excel-vba/core-concepts/For Each Loop.bas +++ b/vba/vba-core/Loops - For Each.bas @@ -1,78 +1,78 @@ -'For Each element In Group -' [statement 1] -' [statement 2] -' .... -' [statement n] -' [Exit For] -' [statement 11] -' [statement 22] -'Next - -Sub ForEachLoop() - - Dim WrkSht As Worksheet - - 'Loop through each worksheet (element) in the worksheet collection (group) - For Each WrkSht In ActiveWorkbook.Worksheets - Debug.Print WrkSht.Name - Next WrkSht - -End Sub - -Sub ForEachLoopExit() - - Dim WrkSht As Worksheet - - 'Loop through each worksheet (element) in the worksheet collection (group) - For Each WrkSht In ActiveWorkbook.Worksheets - - Debug.Print WrkSht.Name - - 'If you found the sheet then exit the for loop - If WrkSht.Name = "MySheet" Then - Exit For - End If - - Next WrkSht - -End Sub - -Sub ForEachLoopSimple() - - Dim WrkSht As Worksheet - - 'Loop through each worksheet (element) in the worksheet collection (group) - For Each WrkSht In ActiveWorkbook.Worksheets - - Debug.Print WrkSht.Name - - 'If you found the sheet then exit the for loop - If WrkSht.Name = "MySheet" Then - Exit For - End If - - Next - -End Sub - -Sub NestedForEachLoop() - - Dim WrkSht As Worksheet - Dim Rng As Range - Dim Cel As Range - - 'Loop through each worksheet (element) in th worksheet collection (group) - For Each WrkSht In ThisWorkbook.Worksheets - - 'Set a reference to a range. - Set Rng = WrkSht.Range("A1:B2") - - 'Loop through the cells in that range. - For Each Cel In Rng - - Cel.Value = 100 - - Next Cel - Next WrkSht - -End Sub +'For Each element In Group +' [statement 1] +' [statement 2] +' .... +' [statement n] +' [Exit For] +' [statement 11] +' [statement 22] +'Next + +Sub ForEachLoop() + + Dim WrkSht As Worksheet + + 'Loop through each worksheet (element) in the worksheet collection (group) + For Each WrkSht In ActiveWorkbook.Worksheets + Debug.Print WrkSht.Name + Next WrkSht + +End Sub + +Sub ForEachLoopExit() + + Dim WrkSht As Worksheet + + 'Loop through each worksheet (element) in the worksheet collection (group) + For Each WrkSht In ActiveWorkbook.Worksheets + + Debug.Print WrkSht.Name + + 'If you found the sheet then exit the for loop + If WrkSht.Name = "MySheet" Then + Exit For + End If + + Next WrkSht + +End Sub + +Sub ForEachLoopSimple() + + Dim WrkSht As Worksheet + + 'Loop through each worksheet (element) in the worksheet collection (group) + For Each WrkSht In ActiveWorkbook.Worksheets + + Debug.Print WrkSht.Name + + 'If you found the sheet then exit the for loop + If WrkSht.Name = "MySheet" Then + Exit For + End If + + Next + +End Sub + +Sub NestedForEachLoop() + + Dim WrkSht As Worksheet + Dim Rng As Range + Dim Cel As Range + + 'Loop through each worksheet (element) in th worksheet collection (group) + For Each WrkSht In ThisWorkbook.Worksheets + + 'Set a reference to a range. + Set Rng = WrkSht.Range("A1:B2") + + 'Loop through the cells in that range. + For Each Cel In Rng + + Cel.Value = 100 + + Next Cel + Next WrkSht + +End Sub diff --git a/vba/excel-vba/core-concepts/For Loops.bas b/vba/vba-core/Loops - For.bas similarity index 93% rename from vba/excel-vba/core-concepts/For Loops.bas rename to vba/vba-core/Loops - For.bas index c386b2d..d891187 100644 --- a/vba/excel-vba/core-concepts/For Loops.bas +++ b/vba/vba-core/Loops - For.bas @@ -1,80 +1,80 @@ -'BASIC SYNTAX -'For counter = start To end [Step increment] -' {...statements...} -'Next [counter] - - -'Parameters or Arguments - -'counter -'The loop counter variable. - -'Start -'The starting value for counter. - -'End -'The ending value for counter. - -'increment -'Optional. The value that counter is incremented each pass through the loop. -'It can be a positive or negative number. -'If not specified, it will default to an increment of 1 so that each pass through the loop increases counter by 1. - -'statements -'The statements of code to execute each pass through the loop. - -Sub ForLoops() - -'The basic for loop -For i = 1 To 10 - Cells(i, 1).Value = i -Next i - -End Sub - -Sub ForLoopsStep() - -'The basic for loop -For i = 1 To 10 Step 2 - Cells(i, 2).Value = i -Next i - -End Sub - -Sub ForLoopsReverse() - -'For loop going in reverse order. -For i = 10 To 1 Step -1 - Cells(i, 3).Value = i -Next i - -End Sub - -Sub NestedLoops() - -'Outer Loop -For i = 1 To 3 - 'Inner Loop - For j = 12 To 16 - Cells(j, i).Value = 100 - Next j -Next i - -End Sub - - -Sub ExitForLoop() - -For i = 1 To 20 - - ' Display the index. - Debug.Print i - - ' If index is 10, exit the loop. - If i = 10 Then - Exit For - End If - -Next i - -End Sub +'BASIC SYNTAX +'For counter = start To end [Step increment] +' {...statements...} +'Next [counter] + + +'Parameters or Arguments + +'counter +'The loop counter variable. + +'Start +'The starting value for counter. + +'End +'The ending value for counter. + +'increment +'Optional. The value that counter is incremented each pass through the loop. +'It can be a positive or negative number. +'If not specified, it will default to an increment of 1 so that each pass through the loop increases counter by 1. + +'statements +'The statements of code to execute each pass through the loop. + +Sub ForLoops() + +'The basic for loop +For i = 1 To 10 + Cells(i, 1).Value = i +Next i + +End Sub + +Sub ForLoopsStep() + +'The basic for loop +For i = 1 To 10 Step 2 + Cells(i, 2).Value = i +Next i + +End Sub + +Sub ForLoopsReverse() + +'For loop going in reverse order. +For i = 10 To 1 Step -1 + Cells(i, 3).Value = i +Next i + +End Sub + +Sub NestedLoops() + +'Outer Loop +For i = 1 To 3 + 'Inner Loop + For j = 12 To 16 + Cells(j, i).Value = 100 + Next j +Next i + +End Sub + + +Sub ExitForLoop() + +For i = 1 To 20 + + ' Display the index. + Debug.Print i + + ' If index is 10, exit the loop. + If i = 10 Then + Exit For + End If + +Next i + +End Sub diff --git a/vba/excel-vba/core-concepts/operators/Arithmetic Operators.bas b/vba/vba-core/operators/Operators - Arithmetic.bas similarity index 95% rename from vba/excel-vba/core-concepts/operators/Arithmetic Operators.bas rename to vba/vba-core/operators/Operators - Arithmetic.bas index 572f088..d974066 100644 --- a/vba/excel-vba/core-concepts/operators/Arithmetic Operators.bas +++ b/vba/vba-core/operators/Operators - Arithmetic.bas @@ -1,26 +1,26 @@ -Sub Operators() - - Dim IntOne As Integer - - 'Adding Two Numbers - IntOne = 5 + 5 - - 'Subtracting Two Numbers - IntOne = 5 - 5 - - 'Dividing Two Numbers - IntOne = 5 / 5 - - 'Multiplying Two Numbers - IntOne = 5 * 5 - - 'The Power Operator - IntOne = 2 ^ 2 - - 'Integer Division Operator - IntOne = 7 \ 4 'Divides two numbers and returns the integer in this case 1 - - 'Modulus - IntOne = 8 Mod 3 'Divides two numbers and returns the remainder in this case 2. - -End Sub +Sub Operators() + + Dim IntOne As Integer + + 'Adding Two Numbers + IntOne = 5 + 5 + + 'Subtracting Two Numbers + IntOne = 5 - 5 + + 'Dividing Two Numbers + IntOne = 5 / 5 + + 'Multiplying Two Numbers + IntOne = 5 * 5 + + 'The Power Operator + IntOne = 2 ^ 2 + + 'Integer Division Operator + IntOne = 7 \ 4 'Divides two numbers and returns the integer in this case 1 + + 'Modulus + IntOne = 8 Mod 3 'Divides two numbers and returns the remainder in this case 2. + +End Sub diff --git a/vba/excel-vba/core-concepts/operators/Comparison Operators.bas b/vba/vba-core/operators/Operators - Comparison.bas similarity index 96% rename from vba/excel-vba/core-concepts/operators/Comparison Operators.bas rename to vba/vba-core/operators/Operators - Comparison.bas index b6bdfa6..53b2ebb 100644 --- a/vba/excel-vba/core-concepts/operators/Comparison Operators.bas +++ b/vba/vba-core/operators/Operators - Comparison.bas @@ -1,44 +1,44 @@ -Sub ComparisonOperators() - -'Comparison operators compare two expressions and return a Boolean value that represents the relationship of their values. _ -'There are operators for comparing numeric values, operators for comparing strings, and operators for comparing objects. - -'Equality Operator - MsgBox 23 = 33 ' Returns False - MsgBox 10 = 10 ' Returns True - -'Inequality Operator - MsgBox 23 <> 33 ' Returns True - MsgBox 10 <> 10 ' Returns False - -'Less Than Operator - MsgBox 23 < 33 ' Returns True - MsgBox 10 < 10 ' Returns False - MsgBox 23 < 12 ' Returns False - -'Greater Than Operator - MsgBox 23 > 33 ' Returns False - MsgBox 10 > 10 ' Returns False - MsgBox 23 > 12 ' Returns True - -'Less Than Or Equal To Operator - MsgBox 23 <= 33 ' Returns True - MsgBox 10 <= 10 ' Returns True - MsgBox 23 <= 12 ' Returns False - -'Greater Than Or Equal To Operator - MsgBox 23 >= 33 ' Returns False - MsgBox 10 >= 10 ' Returns True - MsgBox 23 >= 12 ' Returns True - -End Sub - -Sub TypeProperty() - - Set Rng = Range("A1") - - If TypeOf Rng Is Range Then - MsgBox "You Have a Range" - End If - -End Sub +Sub ComparisonOperators() + +'Comparison operators compare two expressions and return a Boolean value that represents the relationship of their values. _ +'There are operators for comparing numeric values, operators for comparing strings, and operators for comparing objects. + +'Equality Operator + MsgBox 23 = 33 ' Returns False + MsgBox 10 = 10 ' Returns True + +'Inequality Operator + MsgBox 23 <> 33 ' Returns True + MsgBox 10 <> 10 ' Returns False + +'Less Than Operator + MsgBox 23 < 33 ' Returns True + MsgBox 10 < 10 ' Returns False + MsgBox 23 < 12 ' Returns False + +'Greater Than Operator + MsgBox 23 > 33 ' Returns False + MsgBox 10 > 10 ' Returns False + MsgBox 23 > 12 ' Returns True + +'Less Than Or Equal To Operator + MsgBox 23 <= 33 ' Returns True + MsgBox 10 <= 10 ' Returns True + MsgBox 23 <= 12 ' Returns False + +'Greater Than Or Equal To Operator + MsgBox 23 >= 33 ' Returns False + MsgBox 10 >= 10 ' Returns True + MsgBox 23 >= 12 ' Returns True + +End Sub + +Sub TypeProperty() + + Set Rng = Range("A1") + + If TypeOf Rng Is Range Then + MsgBox "You Have a Range" + End If + +End Sub diff --git a/vba/excel-vba/core-concepts/operators/Logical Operators.bas b/vba/vba-core/operators/Operators - Logical.bas similarity index 95% rename from vba/excel-vba/core-concepts/operators/Logical Operators.bas rename to vba/vba-core/operators/Operators - Logical.bas index 9fe14ab..9973db0 100644 --- a/vba/excel-vba/core-concepts/operators/Logical Operators.bas +++ b/vba/vba-core/operators/Operators - Logical.bas @@ -1,53 +1,53 @@ -Attribute VB_Name = "LogicalOperators" -Sub Logical_Operators() - - Dim a As Integer - Dim b As Integer - - a = 100 - b = 0 - - 'The AND operator - If a <> 0 And b <> 0 Then - MsgBox ("AND Operator Result is : True") - Else - MsgBox ("AND Operator Result is : False") - End If - - 'The OR operator - If a <> 0 Or b <> 0 Then - MsgBox ("OR Operator Result is : True") - Else - MsgBox ("OR Operator Result is : False") - End If - - 'The NOT operator - If Not (a <> 0 Or b <> 0) Then - MsgBox ("NOT Operator Result is : True") - Else - MsgBox ("NOT Operator Result is : False") - End If - - 'The XOR operator - If (a <> 0 Xor b <> 0) Then - MsgBox ("XOR Operator Result is : True") - Else - MsgBox ("XOR Operator Result is : False") - End If - - 'The EQV operator - If (a <> 0 Eqv a = 100) Then - MsgBox ("EQV Operator Result is : True") - Else - MsgBox ("EQV Operator Result is : False") - End If - - 'The IMP operator - 'If A is true, then B must be true - If (a <> 0 Imp b = 0) Then - MsgBox ("IMP Operator Result is : True") - Else - MsgBox ("IMP Operator Result is : False") - End If - -End Sub +Attribute VB_Name = "LogicalOperators" +Sub Logical_Operators() + + Dim a As Integer + Dim b As Integer + + a = 100 + b = 0 + + 'The AND operator + If a <> 0 And b <> 0 Then + MsgBox ("AND Operator Result is : True") + Else + MsgBox ("AND Operator Result is : False") + End If + + 'The OR operator + If a <> 0 Or b <> 0 Then + MsgBox ("OR Operator Result is : True") + Else + MsgBox ("OR Operator Result is : False") + End If + + 'The NOT operator + If Not (a <> 0 Or b <> 0) Then + MsgBox ("NOT Operator Result is : True") + Else + MsgBox ("NOT Operator Result is : False") + End If + + 'The XOR operator + If (a <> 0 Xor b <> 0) Then + MsgBox ("XOR Operator Result is : True") + Else + MsgBox ("XOR Operator Result is : False") + End If + + 'The EQV operator + If (a <> 0 Eqv a = 100) Then + MsgBox ("EQV Operator Result is : True") + Else + MsgBox ("EQV Operator Result is : False") + End If + + 'The IMP operator + 'If A is true, then B must be true + If (a <> 0 Imp b = 0) Then + MsgBox ("IMP Operator Result is : True") + Else + MsgBox ("IMP Operator Result is : False") + End If + +End Sub diff --git a/vba/excel-vba/core-concepts/operators/String Operators.bas b/vba/vba-core/operators/Operators - Strings.bas similarity index 96% rename from vba/excel-vba/core-concepts/operators/String Operators.bas rename to vba/vba-core/operators/Operators - Strings.bas index 98c0a1b..c49ab28 100644 --- a/vba/excel-vba/core-concepts/operators/String Operators.bas +++ b/vba/vba-core/operators/Operators - Strings.bas @@ -1,34 +1,34 @@ -Sub StringOperators() - - 'Comments are preceded by the "'" symbol - - Str1 = "Hi" - Str2 = "There" - - 'This is how we combine two strings using the "&" and the "+" symbols. - MsgBox Str1 + " " + Str2 - MsgBox Str1 & " " & Str2 - - 'Here is how write combine multiple lines into a single line using the "&" and "+" symbol. - MultiLineStr = "Hi There " + _ - "my name is " + _ - "Alex" - - MultiLineStr = "Hi There " & _ - "my name is " & _ - "Alex" - - MsgBox MultiLineStr - - 'Lets see if we can condense this for loop into a single line. - For i = 1 To 10 - - x = 1 + 1 - - Next i - - 'If we use the ":" symbol we can combine all the different parts into a single line. - For i = 1 To 10: x = 1 + 1: Next i - - -End Sub +Sub StringOperators() + + 'Comments are preceded by the "'" symbol + + Str1 = "Hi" + Str2 = "There" + + 'This is how we combine two strings using the "&" and the "+" symbols. + MsgBox Str1 + " " + Str2 + MsgBox Str1 & " " & Str2 + + 'Here is how write combine multiple lines into a single line using the "&" and "+" symbol. + MultiLineStr = "Hi There " + _ + "my name is " + _ + "Alex" + + MultiLineStr = "Hi There " & _ + "my name is " & _ + "Alex" + + MsgBox MultiLineStr + + 'Lets see if we can condense this for loop into a single line. + For i = 1 To 10 + + x = 1 + 1 + + Next i + + 'If we use the ":" symbol we can combine all the different parts into a single line. + For i = 1 To 10: x = 1 + 1: Next i + + +End Sub diff --git a/vba/excel-vba/core-concepts/variables/Declare Variables.bas b/vba/vba-core/variables/Variables - Declare.bas similarity index 95% rename from vba/excel-vba/core-concepts/variables/Declare Variables.bas rename to vba/vba-core/variables/Variables - Declare.bas index dc06091..661a157 100644 --- a/vba/excel-vba/core-concepts/variables/Declare Variables.bas +++ b/vba/vba-core/variables/Variables - Declare.bas @@ -1,16 +1,16 @@ -Attribute VB_Name = "VariablesDeclare" -Option Explicit - -Sub Declaring_Variables() - - 'The explicit way - Dim FirstName As String - FirstName = "Alex" - - 'The implicit way, but keep in mind it's now variant. - LastName = "Awesome" - - 'Using the let statement. - Let MiddleName = "Cool" - -End Sub +Attribute VB_Name = "VariablesDeclare" +Option Explicit + +Sub Declaring_Variables() + + 'The explicit way + Dim FirstName As String + FirstName = "Alex" + + 'The implicit way, but keep in mind it's now variant. + LastName = "Awesome" + + 'Using the let statement. + Let MiddleName = "Cool" + +End Sub diff --git a/vba/excel-vba/core-concepts/variables/Variables Run.bas b/vba/vba-core/variables/Variables - Run.bas similarity index 94% rename from vba/excel-vba/core-concepts/variables/Variables Run.bas rename to vba/vba-core/variables/Variables - Run.bas index 39e8823..727713b 100644 --- a/vba/excel-vba/core-concepts/variables/Variables Run.bas +++ b/vba/vba-core/variables/Variables - Run.bas @@ -1,18 +1,18 @@ -Attribute VB_Name = "VariablesRun" -Option Explicit - -'Call my public variable. -Sub CallPublicVariable() - - Call PrintPublicVariable - MsgBox PublicVariable - -End Sub - -'Call my private variable. -Sub CallPrivateVariable() - - Call PrintPrivateVariable - MsgBox PrivateVariable - -End Sub +Attribute VB_Name = "VariablesRun" +Option Explicit + +'Call my public variable. +Sub CallPublicVariable() + + Call PrintPublicVariable + MsgBox PublicVariable + +End Sub + +'Call my private variable. +Sub CallPrivateVariable() + + Call PrintPrivateVariable + MsgBox PrivateVariable + +End Sub diff --git a/vba/excel-vba/core-concepts/variables/Variables Static.bas b/vba/vba-core/variables/Variables - Static.bas similarity index 94% rename from vba/excel-vba/core-concepts/variables/Variables Static.bas rename to vba/vba-core/variables/Variables - Static.bas index f0dba22..9c3db9d 100644 --- a/vba/excel-vba/core-concepts/variables/Variables Static.bas +++ b/vba/vba-core/variables/Variables - Static.bas @@ -1,22 +1,22 @@ -Attribute VB_Name = "VariablesStatic" -Option Explicit - -Sub Static_Variables() - - Dim NumOne As Integer - Static NumTwo As Integer - - NumOne = NumOne + 1 - NumTwo = NumTwo + 1 - - MsgBox "Number One Value: " & NumOne - MsgBox "Number Two Value: " & NumTwo - -End Sub - -'Run to see static versus dim variable. -Sub Run_Static_Procedure() - - Call Static_Variables - -End Sub +Attribute VB_Name = "VariablesStatic" +Option Explicit + +Sub Static_Variables() + + Dim NumOne As Integer + Static NumTwo As Integer + + NumOne = NumOne + 1 + NumTwo = NumTwo + 1 + + MsgBox "Number One Value: " & NumOne + MsgBox "Number Two Value: " & NumTwo + +End Sub + +'Run to see static versus dim variable. +Sub Run_Static_Procedure() + + Call Static_Variables + +End Sub diff --git a/vba/excel-vba/core-concepts/variables/Variables.bas b/vba/vba-core/variables/Variables.bas similarity index 94% rename from vba/excel-vba/core-concepts/variables/Variables.bas rename to vba/vba-core/variables/Variables.bas index 8edcac8..e1cb91c 100644 --- a/vba/excel-vba/core-concepts/variables/Variables.bas +++ b/vba/vba-core/variables/Variables.bas @@ -1,26 +1,26 @@ -Attribute VB_Name = "Variables" -Option Explicit - -Public PublicVariable As Integer -Private PrivateVariable As Integer - -'Populate the public variable. -Sub PrintPublicVariable() - - PublicVariable = 1000 - -End Sub - -'Populate the private variable. -Sub PrintPrivateVariable() - - PrivateVariable = 2000 - -End Sub - -Sub CallPrivateVariable() - - Call PrintPrivateVariable - MsgBox PrivateVariable - -End Sub +Attribute VB_Name = "Variables" +Option Explicit + +Public PublicVariable As Integer +Private PrivateVariable As Integer + +'Populate the public variable. +Sub PrintPublicVariable() + + PublicVariable = 1000 + +End Sub + +'Populate the private variable. +Sub PrintPrivateVariable() + + PrivateVariable = 2000 + +End Sub + +Sub CallPrivateVariable() + + Call PrintPrivateVariable + MsgBox PrivateVariable + +End Sub diff --git a/vba/excel-vba/chart-objects/Charts Part 1.bas b/vba/vba-excel/chart-objects/Charts Part 1.bas similarity index 100% rename from vba/excel-vba/chart-objects/Charts Part 1.bas rename to vba/vba-excel/chart-objects/Charts Part 1.bas diff --git a/vba/excel-vba/chart-objects/Charts Part 2.bas b/vba/vba-excel/chart-objects/Charts Part 2.bas similarity index 100% rename from vba/excel-vba/chart-objects/Charts Part 2.bas rename to vba/vba-excel/chart-objects/Charts Part 2.bas diff --git a/vba/excel-vba/chart-objects/Chart Part 3.bas b/vba/vba-excel/chart-objects/Charts Part 3.bas similarity index 100% rename from vba/excel-vba/chart-objects/Chart Part 3.bas rename to vba/vba-excel/chart-objects/Charts Part 3.bas diff --git a/vba/excel-vba/connection-objects/connection-xls.vb b/vba/vba-excel/connection-objects/connection-xls.vb similarity index 100% rename from vba/excel-vba/connection-objects/connection-xls.vb rename to vba/vba-excel/connection-objects/connection-xls.vb diff --git a/vba/excel-vba/data-imports/Import Text File - Non Power Query.bas b/vba/vba-excel/data-imports/Import Text File - Non Power Query.bas similarity index 100% rename from vba/excel-vba/data-imports/Import Text File - Non Power Query.bas rename to vba/vba-excel/data-imports/Import Text File - Non Power Query.bas diff --git a/vba/excel-vba/core-concepts/Formatting Cells.bas b/vba/vba-excel/formatting/Formatting Cells.bas similarity index 97% rename from vba/excel-vba/core-concepts/Formatting Cells.bas rename to vba/vba-excel/formatting/Formatting Cells.bas index 63a163f..6814346 100644 --- a/vba/excel-vba/core-concepts/Formatting Cells.bas +++ b/vba/vba-excel/formatting/Formatting Cells.bas @@ -1,203 +1,203 @@ -Attribute VB_Name = "Module1" -Option Explicit - -Sub Formats() - -'Change the Number Format of a Cell -Range("A1").NumberFormat = "General" -Range("A1").NumberFormat = "$#,##0.00" -Range("A1").NumberFormat = "$#,##0.00_);[Red]($#,##0.00)" - -'Change the Horizontal alignment of a cell. -Range("A1").HorizontalAlignment = xlHAlignCenter - - 'Name Value Description - 'xlHAlignCenter -4108 Center. - 'xlHAlignCenterAcrossSelection 7 Center across selection. - 'xlHAlignDistributed -4117 Distribute. - 'xlHAlignFill 5 Fill. - 'xlHAlignGeneral 1 Align according to data type. - 'xlHAlignJustify -4130 Justify. - 'xlHAlignLeft -4131 Left. - 'xlHAlignRight -4152 Right. - -'Change the Vertical alignment of a cell. -Range("A1").VerticalAlignment = xlVAlignTop - - 'Name Value Description - 'xlVAlignBottom -4107 Bottom - 'xlVAlignCenter -4108 Center - 'xlVAlignDistributed -4117 Distributed - 'xlVAlignJustify -4130 Justify - 'xlVAlignTop -4160 Top - -'Wrape the text content of a cell. -Range("A1").WrapText = True - -'If set to true it will automatically reduce the size of the font in order to fit the content in the column width. -Rows(1).ShrinkToFit = True - -'Merge a Range of Cells -Range("A1:A4").MergeCells = True - -'Change the reading order of a Cell. -Range("A1").ReadingOrder = xlRTL - - 'Possible Values - 'xlRTL - 'xlLTR - 'xlContext - -'Change the orientation of the cell content. -Range("A1").Orientation = xlHorizontal - - 'Possible Values - 'xlDownward - 'xlHorizontal - 'xlUpward - 'xlVertical - - -'Change the font of a cell. -Range("A1:A5").Font.Name = "Calibri" - -'Change the font style of a cell. -Range("A1:A5").Font.FontStyle = "Italic" - - 'Possible Values - 'Regular - 'Bold - 'Italic - 'Bold Italic - -'Change the Font Size - Range 1 to 409 -Range("A1").Font.Size = 14 - -'Change the Underline Style of a Font. -Range("A1").Font.Underline = xlUnderlineStyleDouble - - 'Name Value Description - 'xlUnderlineStyleDouble -4119 Double thick underline. - 'xlUnderlineStyleDoubleAccounting 5 Two thin underlines placed close together. - 'xlUnderlineStyleNone -4142 No underlining. - 'xlUnderlineStyleSingle 2 Single underlining. - - -'Change the font color, using different methods. -Range("A1").Font.Color = vbBlack -Range("A1").Font.Color = 0 -Range("A1").Font.Color = RGB(0, 0, 0) - -'Add Font, Strikethrough, subscript, or superscript. -Range("A1").Font.Strikethrough = True -Range("A1").Font.Subscript = True -Range("A1").Font.Superscript = True - -'Add a Cell Border, and select a border style. -Range("A1").Borders(xlEdgeBottom).LineStyle = xlContinuous -Range("A1").Borders(xlEdgeBottom).LineStyle = xlNone - - 'Border Constant Value Description - 'xlDiagonalDown 5 (Border running from the upper left-hand corner to the lower right of each cell in the range). - 'xlDiagonalUp 6 (Border running from the lower left-hand corner to the upper right of each cell in the range). - 'xlEdgeBottom 9 (Border at the bottom of the range). - 'xlEdgeLeft 7 (Border at the left-hand edge of the range). - 'xlEdgeRight 10 (Border at the right-hand edge of the range). - 'xlEdgeTop 8 (Border at the top of the range). - 'xlInsideHorizontal 12 (Horizontal borders for all cells in the range except borders on the outside of the range). - 'xlInsideVertical 11 (Vertical borders for all the cells in the range except borders on the outside of the range). - - - 'Name Value Description - 'xlContinuous 1 Continuous line. - 'xlDash -4115 Dashed line. - 'xlDashDot 4 Alternating dashes and dots. - 'xlDashDotDot 5 Dash followed by two dots. - 'xlDot -4118 Dotted line. - 'xlDouble -4119 Double line. - 'xlLineStyleNone -4142 No line. - 'xlSlantDashDot 13 Slanted dashes. - - -'Change the border weight -Range("A1").Borders(xlEdgeBottom).Weight = xlThin - - 'Name Value Description - 'xlHairline 1 Hairline (thinnest border). - 'xlMedium -4138 Medium. - 'xlThick 4 Thick (widest border). - 'xlThin 2 Thin. - -'Change the Border Color. -Range("A1").Borders(xlEdgeBottom).Color = vbGreen -Range("A1").Borders(xlEdgeBottom).Color = RGB(255, 0, 0) - -'Change the Pattern of the cell interior. -Range("A1").Interior.Pattern = xlPatternCrissCross - -'xlPatternAutomatic (Excel controls the pattern.) -'xlPatternChecker (Checkerboard.) -'xlPatternCrissCross (Criss-cross lines.) -'xlPatternDown (Dark diagonal lines running from the upper left to the lower right.) -'xlPatternGray16 (16% gray.) -'xlPatternGray25 (25% gray.) -'xlPatternGray50 (50% gray.) -'xlPatternGray75 (75% gray.) -'xlPatternGray8 (8% gray.) -'xlPatternGrid (Grid.) -'xlPatternHorizontal (Dark horizontal lines.) -'xlPatternLightDown (Light diagonal lines running from the upper left to the lower right.) -'xlPatternLightHorizontal (Light horizontal lines.) -'xlPatternLightUp (Light diagonal lines running from the lower left to the upper right.) -'xlPatternLightVertical (Light vertical bars.) -'xlPatternNone (No pattern.) -'xlPatternSemiGray75 (75% dark moiré.) -'xlPatternSolid (Solid color.) -'xlPatternUp (Dark diagonal lines running from the lower left to the upper right.) - -'Change the interior color of the cell. -Range("A1").Interior.Color = RGB(255, 0, 0) - -'You can enter a number from -1 (darkest) to 1 (lightest) for the TintAndShade property. Zero (0) is neutral. -Range("A1").Interior.TintAndShade - -'Change the Cell interior to a theme color. -Range("A1").Interior.ThemeColor = xlThemeColorDark1 - - - -End Sub - - -Sub Test() - - 'Add Gradients - With Range("C1").Interior - .Pattern = xlPatternLinearGradient - .Gradient.Degree = 180 - - 'Adjust Color Stops - 'Clear Default Color Stops - .Gradient.ColorStops.Clear - - 'Add A Color Stop - With .Gradient.ColorStops.Add(0) - .Color = RGB(255, 255, 255) - End With - - 'Add Another Color Stop - With .Gradient.ColorStops.Add(1) - .Color = RGB(141, 180, 227) - End With - End With - - - - -End Sub - -Sub row() - -Rows(5).ShrinkToFit = True - -End Sub +Attribute VB_Name = "Module1" +Option Explicit + +Sub Formats() + +'Change the Number Format of a Cell +Range("A1").NumberFormat = "General" +Range("A1").NumberFormat = "$#,##0.00" +Range("A1").NumberFormat = "$#,##0.00_);[Red]($#,##0.00)" + +'Change the Horizontal alignment of a cell. +Range("A1").HorizontalAlignment = xlHAlignCenter + + 'Name Value Description + 'xlHAlignCenter -4108 Center. + 'xlHAlignCenterAcrossSelection 7 Center across selection. + 'xlHAlignDistributed -4117 Distribute. + 'xlHAlignFill 5 Fill. + 'xlHAlignGeneral 1 Align according to data type. + 'xlHAlignJustify -4130 Justify. + 'xlHAlignLeft -4131 Left. + 'xlHAlignRight -4152 Right. + +'Change the Vertical alignment of a cell. +Range("A1").VerticalAlignment = xlVAlignTop + + 'Name Value Description + 'xlVAlignBottom -4107 Bottom + 'xlVAlignCenter -4108 Center + 'xlVAlignDistributed -4117 Distributed + 'xlVAlignJustify -4130 Justify + 'xlVAlignTop -4160 Top + +'Wrape the text content of a cell. +Range("A1").WrapText = True + +'If set to true it will automatically reduce the size of the font in order to fit the content in the column width. +Rows(1).ShrinkToFit = True + +'Merge a Range of Cells +Range("A1:A4").MergeCells = True + +'Change the reading order of a Cell. +Range("A1").ReadingOrder = xlRTL + + 'Possible Values + 'xlRTL + 'xlLTR + 'xlContext + +'Change the orientation of the cell content. +Range("A1").Orientation = xlHorizontal + + 'Possible Values + 'xlDownward + 'xlHorizontal + 'xlUpward + 'xlVertical + + +'Change the font of a cell. +Range("A1:A5").Font.Name = "Calibri" + +'Change the font style of a cell. +Range("A1:A5").Font.FontStyle = "Italic" + + 'Possible Values + 'Regular + 'Bold + 'Italic + 'Bold Italic + +'Change the Font Size - Range 1 to 409 +Range("A1").Font.Size = 14 + +'Change the Underline Style of a Font. +Range("A1").Font.Underline = xlUnderlineStyleDouble + + 'Name Value Description + 'xlUnderlineStyleDouble -4119 Double thick underline. + 'xlUnderlineStyleDoubleAccounting 5 Two thin underlines placed close together. + 'xlUnderlineStyleNone -4142 No underlining. + 'xlUnderlineStyleSingle 2 Single underlining. + + +'Change the font color, using different methods. +Range("A1").Font.Color = vbBlack +Range("A1").Font.Color = 0 +Range("A1").Font.Color = RGB(0, 0, 0) + +'Add Font, Strikethrough, subscript, or superscript. +Range("A1").Font.Strikethrough = True +Range("A1").Font.Subscript = True +Range("A1").Font.Superscript = True + +'Add a Cell Border, and select a border style. +Range("A1").Borders(xlEdgeBottom).LineStyle = xlContinuous +Range("A1").Borders(xlEdgeBottom).LineStyle = xlNone + + 'Border Constant Value Description + 'xlDiagonalDown 5 (Border running from the upper left-hand corner to the lower right of each cell in the range). + 'xlDiagonalUp 6 (Border running from the lower left-hand corner to the upper right of each cell in the range). + 'xlEdgeBottom 9 (Border at the bottom of the range). + 'xlEdgeLeft 7 (Border at the left-hand edge of the range). + 'xlEdgeRight 10 (Border at the right-hand edge of the range). + 'xlEdgeTop 8 (Border at the top of the range). + 'xlInsideHorizontal 12 (Horizontal borders for all cells in the range except borders on the outside of the range). + 'xlInsideVertical 11 (Vertical borders for all the cells in the range except borders on the outside of the range). + + + 'Name Value Description + 'xlContinuous 1 Continuous line. + 'xlDash -4115 Dashed line. + 'xlDashDot 4 Alternating dashes and dots. + 'xlDashDotDot 5 Dash followed by two dots. + 'xlDot -4118 Dotted line. + 'xlDouble -4119 Double line. + 'xlLineStyleNone -4142 No line. + 'xlSlantDashDot 13 Slanted dashes. + + +'Change the border weight +Range("A1").Borders(xlEdgeBottom).Weight = xlThin + + 'Name Value Description + 'xlHairline 1 Hairline (thinnest border). + 'xlMedium -4138 Medium. + 'xlThick 4 Thick (widest border). + 'xlThin 2 Thin. + +'Change the Border Color. +Range("A1").Borders(xlEdgeBottom).Color = vbGreen +Range("A1").Borders(xlEdgeBottom).Color = RGB(255, 0, 0) + +'Change the Pattern of the cell interior. +Range("A1").Interior.Pattern = xlPatternCrissCross + +'xlPatternAutomatic (Excel controls the pattern.) +'xlPatternChecker (Checkerboard.) +'xlPatternCrissCross (Criss-cross lines.) +'xlPatternDown (Dark diagonal lines running from the upper left to the lower right.) +'xlPatternGray16 (16% gray.) +'xlPatternGray25 (25% gray.) +'xlPatternGray50 (50% gray.) +'xlPatternGray75 (75% gray.) +'xlPatternGray8 (8% gray.) +'xlPatternGrid (Grid.) +'xlPatternHorizontal (Dark horizontal lines.) +'xlPatternLightDown (Light diagonal lines running from the upper left to the lower right.) +'xlPatternLightHorizontal (Light horizontal lines.) +'xlPatternLightUp (Light diagonal lines running from the lower left to the upper right.) +'xlPatternLightVertical (Light vertical bars.) +'xlPatternNone (No pattern.) +'xlPatternSemiGray75 (75% dark moiré.) +'xlPatternSolid (Solid color.) +'xlPatternUp (Dark diagonal lines running from the lower left to the upper right.) + +'Change the interior color of the cell. +Range("A1").Interior.Color = RGB(255, 0, 0) + +'You can enter a number from -1 (darkest) to 1 (lightest) for the TintAndShade property. Zero (0) is neutral. +Range("A1").Interior.TintAndShade + +'Change the Cell interior to a theme color. +Range("A1").Interior.ThemeColor = xlThemeColorDark1 + + + +End Sub + + +Sub Test() + + 'Add Gradients + With Range("C1").Interior + .Pattern = xlPatternLinearGradient + .Gradient.Degree = 180 + + 'Adjust Color Stops + 'Clear Default Color Stops + .Gradient.ColorStops.Clear + + 'Add A Color Stop + With .Gradient.ColorStops.Add(0) + .Color = RGB(255, 255, 255) + End With + + 'Add Another Color Stop + With .Gradient.ColorStops.Add(1) + .Color = RGB(141, 180, 227) + End With + End With + + + + +End Sub + +Sub row() + +Rows(5).ShrinkToFit = True + +End Sub diff --git a/vba/excel-vba/list-objects/Working With List Objects.bas b/vba/vba-excel/list-objects/Working With List Objects.bas similarity index 97% rename from vba/excel-vba/list-objects/Working With List Objects.bas rename to vba/vba-excel/list-objects/Working With List Objects.bas index 2ecea93..b7f8b43 100644 --- a/vba/excel-vba/list-objects/Working With List Objects.bas +++ b/vba/vba-excel/list-objects/Working With List Objects.bas @@ -1,111 +1,111 @@ -Sub CreateListObject() - - Dim ListObj As ListObject - Set ListObj = ActiveSheet.ListObjects.Add(SourceType:=xlSrcRange, _ - Source:=Range("$A$1:$C$5"), _ - XlListObjectHasHeaders:=xlNo, _ - Destination:=Range("$I$1"), _ - TableStyleName:="TableStyleLight1") - - 'PARMETER ONE: - 'SourceType:= xlSrcExternal, (External Data Connection) _ - xlSrcModel (PowerPivot Model), _ - xlSrcQuery (Query), _ - xlSrcRange (Range), _ - xlSrcXml (XML) - - 'PARAMTER TWO: - 'Source:= When SourceType equal xlSrcRange we need to pass through a range object. _ - If Omitted, then the source will default to the range returned by the list range _ - detection code. When SourceType equals xlSrcExternal an array of string values must be _ - passed through with the following three elements: _ - 0 - URL to SharePoint Site _ - 1 - ListName _ - 2 - View GUID - - 'PARAMETER THREE: - 'LinkSource:= Indicates whether an external data source is to be linked to the ListObject object. _ - If SourceType is xlSrcExternal, default is True. Invalid if SourceType is xlSrcRange , _ - and will return an error if not omitted. - - 'PARAMETER FOUR: - 'XlListObjectHasHeaders:= An xlYesNoGuess constant that indicates whether the data being imported has column labels. _ - If the Source does not contain headers, Excel will automatically generate headers. _ - Value Default: xlGuess. _ - Value Yes: xlYes. _ - Value No: xlNo. - - - 'PARAMETER FIVE: - 'Destination:= A Range object specifying a single-cell reference as the destination for the top-left corner of the new list object. _ - If the Range object refers to more than one cell, an error is generated. The Destination argument must be specified when SourceType is set to xlSrcExternal. _ - The Destination argument is ignored if SourceType is set to xlSrcRange. The destination range must be on the worksheet that _ - contains the ListObjects collection specified by expression. New columns will be inserted at the Destination to fit the new list. _ - Therefore, existing data will not be overwritten. - - 'PARAMETER SIX: - 'TableStyleName:= This is the name of a table style that we can apply to the table, in this example we used TableStyleLight1. - - -End Sub - -Sub CreateTableFromSharePointList() - - 'Declare Variables - Dim Server As String - Dim ListName As String - Dim ViewName As String - Dim ListObj As ListObject - - 'Get Connection String Paramaters - Server = "https://petco.sharepoint.com/sites/AnalyticsCommunity/_vti_bin" '<<< THIS IS YOUR SHAREPOINT SITE REPLACE WIT THE PROPER URL & MAKE SURE Vti_bin IS AT THE END. - ListName = "{6DC036F2-05F3-4EB9-A732-43E1C6827682}" '<<< This is the list name - ViewName = "{5D8F3E3B-2425-4CCB-953C-22E82242EC05}" '<<< This is the view name - - - 'TO GET THE LIST NAME/ID - 'Go To the List in SharePoin, click Settings & then right click "Audience Target Settings" - - 'Click Copy link address & Paste it in VBA. - 'https://petco.sharepoint.com/sites/AnalyticsCommunity/_layouts/ListEnableTargeting.aspx?List={6dc036f2-05f3-4eb9-a732-43e1c6827682} - - 'Delete Everything Before List & this is the List ID/Name: - 'List={6dc036f2-05f3-4eb9-a732-43e1c6827682} - - - 'TO GET THE VIEW ID - 'Go to the list in SharePoint, then the list section at the top of the ribbon, click modify view, & copy the URL on the new page. - 'https://petco.sharepoint.com/sites/AnalyticsCommunity/_layouts/15/ViewEdit.aspx?List=6dc036f2-05f3-4eb9-a732-43e1c6827682&View=%7B5D8F3E3B-2425-4CCB-953C-22E82242EC05%7D&Source=https%3A%2F%2Fpetco%2Esharepoint%2Ecom%2Fsites%2FAnalyticsCommunity%2FLists%2FPlatforms_Master%2FAllItems%2Easpx - - 'Keeo only the View Section - 'View=%7B5D8F3E3B-2425-4CCB-953C-22E82242EC05%7D - - 'Replace %7B with "{" & %7D with "}", you now have the View ID. - 'View={5D8F3E3B-2425-4CCB-953C-22E82242EC05} - - - Set ListObj = ActiveSheet.ListObjects.Add(SourceType:=xlSrcExternal, _ - Source:=Array(Server, ListName, ViewName), _ - XlListObjectHasHeaders:=xlYes, _ - LinkSource:=xlYes, _ - Destination:=Range("$A$21"), _ - TableStyleName:="TableStyleLight1") - - -End Sub - - -Sub SelectListObject() - - Dim LisObj As ListObject - - Set LisObj = ActiveSheet.ListObjects(2) - LisObj.Range.Select - LisObj.HeaderRowRange.Select - LisObj.DataBodyRange.Select - LisObj.TotalsRowRange.Select - -End Sub - - - +Sub CreateListObject() + + Dim ListObj As ListObject + Set ListObj = ActiveSheet.ListObjects.Add(SourceType:=xlSrcRange, _ + Source:=Range("$A$1:$C$5"), _ + XlListObjectHasHeaders:=xlNo, _ + Destination:=Range("$I$1"), _ + TableStyleName:="TableStyleLight1") + + 'PARMETER ONE: + 'SourceType:= xlSrcExternal, (External Data Connection) _ + xlSrcModel (PowerPivot Model), _ + xlSrcQuery (Query), _ + xlSrcRange (Range), _ + xlSrcXml (XML) + + 'PARAMTER TWO: + 'Source:= When SourceType equal xlSrcRange we need to pass through a range object. _ + If Omitted, then the source will default to the range returned by the list range _ + detection code. When SourceType equals xlSrcExternal an array of string values must be _ + passed through with the following three elements: _ + 0 - URL to SharePoint Site _ + 1 - ListName _ + 2 - View GUID + + 'PARAMETER THREE: + 'LinkSource:= Indicates whether an external data source is to be linked to the ListObject object. _ + If SourceType is xlSrcExternal, default is True. Invalid if SourceType is xlSrcRange , _ + and will return an error if not omitted. + + 'PARAMETER FOUR: + 'XlListObjectHasHeaders:= An xlYesNoGuess constant that indicates whether the data being imported has column labels. _ + If the Source does not contain headers, Excel will automatically generate headers. _ + Value Default: xlGuess. _ + Value Yes: xlYes. _ + Value No: xlNo. + + + 'PARAMETER FIVE: + 'Destination:= A Range object specifying a single-cell reference as the destination for the top-left corner of the new list object. _ + If the Range object refers to more than one cell, an error is generated. The Destination argument must be specified when SourceType is set to xlSrcExternal. _ + The Destination argument is ignored if SourceType is set to xlSrcRange. The destination range must be on the worksheet that _ + contains the ListObjects collection specified by expression. New columns will be inserted at the Destination to fit the new list. _ + Therefore, existing data will not be overwritten. + + 'PARAMETER SIX: + 'TableStyleName:= This is the name of a table style that we can apply to the table, in this example we used TableStyleLight1. + + +End Sub + +Sub CreateTableFromSharePointList() + + 'Declare Variables + Dim Server As String + Dim ListName As String + Dim ViewName As String + Dim ListObj As ListObject + + 'Get Connection String Paramaters + Server = "https://petco.sharepoint.com/sites/AnalyticsCommunity/_vti_bin" '<<< THIS IS YOUR SHAREPOINT SITE REPLACE WIT THE PROPER URL & MAKE SURE Vti_bin IS AT THE END. + ListName = "{6DC036F2-05F3-4EB9-A732-43E1C6827682}" '<<< This is the list name + ViewName = "{5D8F3E3B-2425-4CCB-953C-22E82242EC05}" '<<< This is the view name + + + 'TO GET THE LIST NAME/ID + 'Go To the List in SharePoin, click Settings & then right click "Audience Target Settings" + + 'Click Copy link address & Paste it in VBA. + 'https://petco.sharepoint.com/sites/AnalyticsCommunity/_layouts/ListEnableTargeting.aspx?List={6dc036f2-05f3-4eb9-a732-43e1c6827682} + + 'Delete Everything Before List & this is the List ID/Name: + 'List={6dc036f2-05f3-4eb9-a732-43e1c6827682} + + + 'TO GET THE VIEW ID + 'Go to the list in SharePoint, then the list section at the top of the ribbon, click modify view, & copy the URL on the new page. + 'https://petco.sharepoint.com/sites/AnalyticsCommunity/_layouts/15/ViewEdit.aspx?List=6dc036f2-05f3-4eb9-a732-43e1c6827682&View=%7B5D8F3E3B-2425-4CCB-953C-22E82242EC05%7D&Source=https%3A%2F%2Fpetco%2Esharepoint%2Ecom%2Fsites%2FAnalyticsCommunity%2FLists%2FPlatforms_Master%2FAllItems%2Easpx + + 'Keeo only the View Section + 'View=%7B5D8F3E3B-2425-4CCB-953C-22E82242EC05%7D + + 'Replace %7B with "{" & %7D with "}", you now have the View ID. + 'View={5D8F3E3B-2425-4CCB-953C-22E82242EC05} + + + Set ListObj = ActiveSheet.ListObjects.Add(SourceType:=xlSrcExternal, _ + Source:=Array(Server, ListName, ViewName), _ + XlListObjectHasHeaders:=xlYes, _ + LinkSource:=xlYes, _ + Destination:=Range("$A$21"), _ + TableStyleName:="TableStyleLight1") + + +End Sub + + +Sub SelectListObject() + + Dim LisObj As ListObject + + Set LisObj = ActiveSheet.ListObjects(2) + LisObj.Range.Select + LisObj.HeaderRowRange.Select + LisObj.DataBodyRange.Select + LisObj.TotalsRowRange.Select + +End Sub + + + diff --git a/vba/excel-vba/pivot-tables/Pivot Table - Part 1.bas b/vba/vba-excel/pivot-tables/Pivot Table Part 1.bas similarity index 96% rename from vba/excel-vba/pivot-tables/Pivot Table - Part 1.bas rename to vba/vba-excel/pivot-tables/Pivot Table Part 1.bas index 1523a0a..b67cf11 100644 --- a/vba/excel-vba/pivot-tables/Pivot Table - Part 1.bas +++ b/vba/vba-excel/pivot-tables/Pivot Table Part 1.bas @@ -1,63 +1,63 @@ -Sub CreatePivotTable() - -'Declare Variables -Dim PvtCache As PivotCache -Dim PvtTbl As PivotTable -Dim PvtFld As PivotField -Dim DataTbl As ListObject - -'Delete Pivot Table -ActiveSheet.PivotTables("MyNewPivotTable").TableRange2.Delete - -'Create a reference to the data source -Set DataTbl = Worksheets("Data_Table").ListObjects(1) - -'Create the Pivot Cache -Set PvtCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _ - SourceData:=DataTbl.Name, _ - Version:=6) - -'Create the Pivot Table -Set PvtTbl = PvtCache.CreatePivotTable(TableDestination:="Pivot_Table!R1C1", _ - TableName:="MyNewPivotTable", _ - DefaultVersion:=6) - -'Create a Row Field -With PvtTbl.PivotFields("Year") - .Orientation = xlRowField - .Position = 1 -End With - -'Create Another Row Field, this will be the inner one. -With PvtTbl.PivotFields("Country") - .Orientation = xlRowField - .Position = 2 -End With - -'Create a Column Field -With PvtTbl.PivotFields("Month Name") - .Orientation = xlColumnField - .Position = 1 -End With - -'Create a Data Field -With PvtTbl.PivotFields("COGS") - .Orientation = xlDataField - .Position = 1 -End With - -'Create a Filter Field -With PvtTbl.PivotFields("Product") - .Orientation = xlPageField - .Position = 1 -End With - -'Hide a field -Set PvtFld = PvtTbl.PivotFields("Month Name") - PvtFld.PivotItems("January").Visible = False - -'Change the Layout & Style -PvtTbl.RowAxisLayout xlTabularRow -PvtTbl.TableStyle2 = "PivotStyleLight24" - -End Sub +Sub CreatePivotTable() + +'Declare Variables +Dim PvtCache As PivotCache +Dim PvtTbl As PivotTable +Dim PvtFld As PivotField +Dim DataTbl As ListObject + +'Delete Pivot Table +ActiveSheet.PivotTables("MyNewPivotTable").TableRange2.Delete + +'Create a reference to the data source +Set DataTbl = Worksheets("Data_Table").ListObjects(1) + +'Create the Pivot Cache +Set PvtCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _ + SourceData:=DataTbl.Name, _ + Version:=6) + +'Create the Pivot Table +Set PvtTbl = PvtCache.CreatePivotTable(TableDestination:="Pivot_Table!R1C1", _ + TableName:="MyNewPivotTable", _ + DefaultVersion:=6) + +'Create a Row Field +With PvtTbl.PivotFields("Year") + .Orientation = xlRowField + .Position = 1 +End With + +'Create Another Row Field, this will be the inner one. +With PvtTbl.PivotFields("Country") + .Orientation = xlRowField + .Position = 2 +End With + +'Create a Column Field +With PvtTbl.PivotFields("Month Name") + .Orientation = xlColumnField + .Position = 1 +End With + +'Create a Data Field +With PvtTbl.PivotFields("COGS") + .Orientation = xlDataField + .Position = 1 +End With + +'Create a Filter Field +With PvtTbl.PivotFields("Product") + .Orientation = xlPageField + .Position = 1 +End With + +'Hide a field +Set PvtFld = PvtTbl.PivotFields("Month Name") + PvtFld.PivotItems("January").Visible = False + +'Change the Layout & Style +PvtTbl.RowAxisLayout xlTabularRow +PvtTbl.TableStyle2 = "PivotStyleLight24" + +End Sub diff --git a/vba/excel-vba/pivot-tables/Pivot Table - Part 2.bas b/vba/vba-excel/pivot-tables/Pivot Table Part 2.bas similarity index 96% rename from vba/excel-vba/pivot-tables/Pivot Table - Part 2.bas rename to vba/vba-excel/pivot-tables/Pivot Table Part 2.bas index 3105542..cede0a0 100644 --- a/vba/excel-vba/pivot-tables/Pivot Table - Part 2.bas +++ b/vba/vba-excel/pivot-tables/Pivot Table Part 2.bas @@ -1,116 +1,116 @@ -Sub CreatePivotTable() - -'Declare Variables -Dim PvtCache As PivotCache -Dim PvtTbl As PivotTable -Dim PvtFld As PivotField -Dim DataTbl As ListObject - -'Delete Pivot Table -ActiveSheet.PivotTables("MyNewPivotTable").TableRange2.Delete - -'Create a reference to the data table -Set DataTbl = Worksheets("Data_Table").ListObjects(1) - -'Create a Pivot Cache -Set PvtCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _ - SourceData:=DataTbl.Name, _ - Version:=6) - -'Create a Pivot Table -Set PvtTbl = PvtCache.CreatePivotTable(TableDestination:="Pivot_Table!R1C1", _ - TableName:="MyNewPivotTable", _ - DefaultVersion:=6) - -'Create a row field -With PvtTbl.PivotFields("Year") - .Orientation = xlRowField - .Position = 1 -End With - -'Create a row field -With PvtTbl.PivotFields("Country") - .Orientation = xlRowField - .Position = 2 -End With - -'Create a column field -With PvtTbl.PivotFields("Month Name") - .Orientation = xlColumnField - .Position = 1 -End With - -'Create a data field -With PvtTbl.PivotFields("COGS") - .Orientation = xlDataField - .Position = 1 -End With - -'Create a filter field -With PvtTbl.PivotFields("Product") - .Orientation = xlPageField - .Position = 1 -End With - -'Hide a pivot item -Set PvtFld = PvtTbl.PivotFields("Month Name") - PvtFld.PivotItems("March").Visible = False - -'Change the layout -PvtTbl.RowAxisLayout xlTabularRow - -'Change the color -PvtTbl.TableStyle2 = "PivotStyleLight24" - -'Create a calculate field -PvtTbl.CalculatedFields.Add "Average Selling Price", "=Gross Sales / Units Sold" - -'Create the field to house the calculated field -With PvtTbl.PivotFields("Average Selling Price") - .Orientation = xlDataField - .Position = 2 - .NumberFormat = "#,##0.00" -End With - -'Add a Calculated Field -PvtTbl.CalculatedFields.Add "Average Selling Price 2", "= Average Selling Price *.1" - -'Create a Data Field -With PvtTbl.PivotFields("Average Selling Price 2") - .Orientation = xlDataField - .Position = 3 - .NumberFormat = "#,##0.00" -End With - -'Add a Calculated Item -PvtTbl.PivotFields("Country").CalculatedItems.Add "North America", "=Canada + Mexico + United States of America" - - -'Get Pivot Data With VBA -Range("A22").Value = PvtTbl.GetPivotData("Sum Of COGS", "Country", "Canada", "Year", "2014", "Month Name", "April") - -'Get Data -Range("A23").Value = PvtTbl.GetData("Sum Of COGS Canada 2014 April") - -'Pivot Select VBA -PvtTbl.PivotSelect "Country['France'] Year['2013']", xlDataAndLabel - -'Selecting Different Parts of Our Pivot Table -PvtTbl.DataBodyRange.Select -PvtTbl.DataLabelRange.Select -PvtTbl.RowRange.Select -PvtTbl.ColumnRange.Select -PvtTbl.PageRange.Select -PvtTbl.TableRange1.Select -PvtTbl.TableRange2.Select - -'Clear all Filters -PvtTbl.PivotFields("Month Name").ClearAllFilters - -'Add a Top 2 Filter -PvtTbl.PivotFields("Month Name").PivotFilters.Add2 Type:=xlTopCount, DataField:=PvtTbl.PivotFields("Sum of COGS"), Value1:=2 - -'Add a Label Filter -PvtTbl.PivotFields("Month Name").PivotFilters.Add2 Type:=xlCaptionContains, Value1:="Feb" - -End Sub +Sub CreatePivotTable() + +'Declare Variables +Dim PvtCache As PivotCache +Dim PvtTbl As PivotTable +Dim PvtFld As PivotField +Dim DataTbl As ListObject + +'Delete Pivot Table +ActiveSheet.PivotTables("MyNewPivotTable").TableRange2.Delete + +'Create a reference to the data table +Set DataTbl = Worksheets("Data_Table").ListObjects(1) + +'Create a Pivot Cache +Set PvtCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _ + SourceData:=DataTbl.Name, _ + Version:=6) + +'Create a Pivot Table +Set PvtTbl = PvtCache.CreatePivotTable(TableDestination:="Pivot_Table!R1C1", _ + TableName:="MyNewPivotTable", _ + DefaultVersion:=6) + +'Create a row field +With PvtTbl.PivotFields("Year") + .Orientation = xlRowField + .Position = 1 +End With + +'Create a row field +With PvtTbl.PivotFields("Country") + .Orientation = xlRowField + .Position = 2 +End With + +'Create a column field +With PvtTbl.PivotFields("Month Name") + .Orientation = xlColumnField + .Position = 1 +End With + +'Create a data field +With PvtTbl.PivotFields("COGS") + .Orientation = xlDataField + .Position = 1 +End With + +'Create a filter field +With PvtTbl.PivotFields("Product") + .Orientation = xlPageField + .Position = 1 +End With + +'Hide a pivot item +Set PvtFld = PvtTbl.PivotFields("Month Name") + PvtFld.PivotItems("March").Visible = False + +'Change the layout +PvtTbl.RowAxisLayout xlTabularRow + +'Change the color +PvtTbl.TableStyle2 = "PivotStyleLight24" + +'Create a calculate field +PvtTbl.CalculatedFields.Add "Average Selling Price", "=Gross Sales / Units Sold" + +'Create the field to house the calculated field +With PvtTbl.PivotFields("Average Selling Price") + .Orientation = xlDataField + .Position = 2 + .NumberFormat = "#,##0.00" +End With + +'Add a Calculated Field +PvtTbl.CalculatedFields.Add "Average Selling Price 2", "= Average Selling Price *.1" + +'Create a Data Field +With PvtTbl.PivotFields("Average Selling Price 2") + .Orientation = xlDataField + .Position = 3 + .NumberFormat = "#,##0.00" +End With + +'Add a Calculated Item +PvtTbl.PivotFields("Country").CalculatedItems.Add "North America", "=Canada + Mexico + United States of America" + + +'Get Pivot Data With VBA +Range("A22").Value = PvtTbl.GetPivotData("Sum Of COGS", "Country", "Canada", "Year", "2014", "Month Name", "April") + +'Get Data +Range("A23").Value = PvtTbl.GetData("Sum Of COGS Canada 2014 April") + +'Pivot Select VBA +PvtTbl.PivotSelect "Country['France'] Year['2013']", xlDataAndLabel + +'Selecting Different Parts of Our Pivot Table +PvtTbl.DataBodyRange.Select +PvtTbl.DataLabelRange.Select +PvtTbl.RowRange.Select +PvtTbl.ColumnRange.Select +PvtTbl.PageRange.Select +PvtTbl.TableRange1.Select +PvtTbl.TableRange2.Select + +'Clear all Filters +PvtTbl.PivotFields("Month Name").ClearAllFilters + +'Add a Top 2 Filter +PvtTbl.PivotFields("Month Name").PivotFilters.Add2 Type:=xlTopCount, DataField:=PvtTbl.PivotFields("Sum of COGS"), Value1:=2 + +'Add a Label Filter +PvtTbl.PivotFields("Month Name").PivotFilters.Add2 Type:=xlCaptionContains, Value1:="Feb" + +End Sub diff --git a/vba/excel-vba/pivot-tables/Pivot Table - Part 3.bas b/vba/vba-excel/pivot-tables/Pivot Table Part 3.bas similarity index 97% rename from vba/excel-vba/pivot-tables/Pivot Table - Part 3.bas rename to vba/vba-excel/pivot-tables/Pivot Table Part 3.bas index 25c8bed..5a392dc 100644 --- a/vba/excel-vba/pivot-tables/Pivot Table - Part 3.bas +++ b/vba/vba-excel/pivot-tables/Pivot Table Part 3.bas @@ -1,79 +1,79 @@ -Sub PivotTablePart3() - -'Declare Variables -Dim PvtTbl As PivotTable -Dim PvtFlds As PivotFields -Dim PvtFld As PivotField - -'Reference the Pivot Table -Set PvtTbl = ActiveSheet.PivotTables("MyNewPivotTable") - -'Loop through each field in our collection -For Each PvtFld In PvtTbl.VisibleFields - Debug.Print PvtFld.Name - Debug.Print PvtFld.Value - Debug.Print PvtFld.DataType -Next - -'Create a reference to a single pivot field -Set PvtFld = PvtTbl.PivotFields("Year") - PvtFld.DragToColumn = False - PvtFld.DragToData = True - PvtFld.DragToHide = False - -'Get the detail for the cell -ActiveCell.ShowDetail = True - -'Declare more variables -Dim PvtAxs As PivotAxis -Dim PvtLns As PivotLines -Dim PvtLin As PivotLine - -'Reference an Axis of the Pivot Table -Set PvtAxs = PvtTbl.PivotRowAxis -Set PvtLns = PvtAxs.PivotLines - -'Loop through each line -For Each PvtLin In PvtLns - Debug.Print PvtLin.Position - Debug.Print PvtLin.LineType - Debug.Print PvtLin.Application -Next - -'xlPivotLineBlank 3 Blank line after each group. -'xlPivotLineGrandTotal 2 Grand Total line. -'xlPivotLineRegular 0 Regular PivotLine with pivot items. -'xlPivotLineSubtotal 1 Subtotal line. - -'Declare Variable -Dim PvtCell As PivotCell - -'Reference an individual Line -Set PvtLin = PvtLns.Item(3) - -'Loop through each Pivot cell in our line -For Each PvtCell In PvtLin.PivotLineCellsFull - Debug.Print PvtCell.Range - Debug.Print PvtCell.PivotTable - Debug.Print PvtCell.PivotCellType - Debug.Print PvtCell.PivotItem - Debug.Print PvtCell.PivotField -Next - -'xlPivotCellBlankCell 9 A structural blank cell in the PivotTable. -'xlPivotCellCustomSubtotal 7 A cell in the row or column area that is a custom subtotal. -'xlPivotCellDataField 4 A data field label (not the Data button). -'xlPivotCellDataPivotField 8 The Data button. -'xlPivotCellGrandTotal 3 A cell in a row or column area that is a grand total. -'xlPivotCellPageFieldItem 6 The cell that shows the selected item of a Page field. -'xlPivotCellPivotField 5 The button for a field (not the Data button). -'xlPivotCellPivotItem 1 A cell in the row or column area that is not a subtotal, grand total, custom subtotal, or blank line. -'xlPivotCellSubtotal 2 A cell in the row or column area that is a subtotal. -'xlPivotCellValue 0 Any cell in the data area (except a blank row). - -Debug.Print PvtTbl.PivotValueCell(3, 1).PivotCell.PivotCellType -Debug.Print PvtTbl.PivotValueCell(3, 1).Value - -PvtTbl.PivotValueCell(3, 1).ShowDetail - -End Sub +Sub PivotTablePart3() + +'Declare Variables +Dim PvtTbl As PivotTable +Dim PvtFlds As PivotFields +Dim PvtFld As PivotField + +'Reference the Pivot Table +Set PvtTbl = ActiveSheet.PivotTables("MyNewPivotTable") + +'Loop through each field in our collection +For Each PvtFld In PvtTbl.VisibleFields + Debug.Print PvtFld.Name + Debug.Print PvtFld.Value + Debug.Print PvtFld.DataType +Next + +'Create a reference to a single pivot field +Set PvtFld = PvtTbl.PivotFields("Year") + PvtFld.DragToColumn = False + PvtFld.DragToData = True + PvtFld.DragToHide = False + +'Get the detail for the cell +ActiveCell.ShowDetail = True + +'Declare more variables +Dim PvtAxs As PivotAxis +Dim PvtLns As PivotLines +Dim PvtLin As PivotLine + +'Reference an Axis of the Pivot Table +Set PvtAxs = PvtTbl.PivotRowAxis +Set PvtLns = PvtAxs.PivotLines + +'Loop through each line +For Each PvtLin In PvtLns + Debug.Print PvtLin.Position + Debug.Print PvtLin.LineType + Debug.Print PvtLin.Application +Next + +'xlPivotLineBlank 3 Blank line after each group. +'xlPivotLineGrandTotal 2 Grand Total line. +'xlPivotLineRegular 0 Regular PivotLine with pivot items. +'xlPivotLineSubtotal 1 Subtotal line. + +'Declare Variable +Dim PvtCell As PivotCell + +'Reference an individual Line +Set PvtLin = PvtLns.Item(3) + +'Loop through each Pivot cell in our line +For Each PvtCell In PvtLin.PivotLineCellsFull + Debug.Print PvtCell.Range + Debug.Print PvtCell.PivotTable + Debug.Print PvtCell.PivotCellType + Debug.Print PvtCell.PivotItem + Debug.Print PvtCell.PivotField +Next + +'xlPivotCellBlankCell 9 A structural blank cell in the PivotTable. +'xlPivotCellCustomSubtotal 7 A cell in the row or column area that is a custom subtotal. +'xlPivotCellDataField 4 A data field label (not the Data button). +'xlPivotCellDataPivotField 8 The Data button. +'xlPivotCellGrandTotal 3 A cell in a row or column area that is a grand total. +'xlPivotCellPageFieldItem 6 The cell that shows the selected item of a Page field. +'xlPivotCellPivotField 5 The button for a field (not the Data button). +'xlPivotCellPivotItem 1 A cell in the row or column area that is not a subtotal, grand total, custom subtotal, or blank line. +'xlPivotCellSubtotal 2 A cell in the row or column area that is a subtotal. +'xlPivotCellValue 0 Any cell in the data area (except a blank row). + +Debug.Print PvtTbl.PivotValueCell(3, 1).PivotCell.PivotCellType +Debug.Print PvtTbl.PivotValueCell(3, 1).Value + +PvtTbl.PivotValueCell(3, 1).ShowDetail + +End Sub diff --git a/vba/excel-vba/power-pivot/Power Pivot - Part 1.bas b/vba/vba-excel/power-pivot/Power Pivot Part 1.bas similarity index 97% rename from vba/excel-vba/power-pivot/Power Pivot - Part 1.bas rename to vba/vba-excel/power-pivot/Power Pivot Part 1.bas index 16d23bd..01d47e4 100644 --- a/vba/excel-vba/power-pivot/Power Pivot - Part 1.bas +++ b/vba/vba-excel/power-pivot/Power Pivot Part 1.bas @@ -1,64 +1,64 @@ -Sub ReferencePPM() -Dim myModel As Model - -Set myModel = ActiveWorkbook.Model - Debug.Print myModel.Application - Debug.Print myModel.Name - Debug.Print myModel.Creator - Debug.Print myModel.DataModelConnection - -End Sub - -Sub AddAConnection() - -WrkName = ActiveWorkbook.Name -TblName = Sheets("Price_Data").ListObjects(1).Name -FilPath = ActiveWorkbook.Path - -ConnStr = "WORKSHEET;" + FilPath -CommTxt = WrkName + "!" + TblName - -'"WORKSHEET;C:\Users\305197\Desktop\PowerPivot.xlsm" -Workbooks("PowerPivot.xlsm").Connections.Add2 _ - Name:="MyConnectionToData", _ - Description:="This is my price dataset.", _ - ConnectionString:=ConnStr, _ - CommandText:=CommTxt, _ - lCmdtype:=xlCmdExcel, _ - CreateModelConnection:=True, _ - ImportRelationships:=False - -End Sub - -Sub AddMeasureToPowerPivot() - -'Declare your variables. -Dim myModel As Model -Dim myModelTables As ModelTables -Dim myModelMeasures As ModelMeasures -Dim myModelTable As ModelTable - -'Create a reference to the PowerPivot Model -Set myModel = ActiveWorkbook.Model - -'Create a reference to the ModelTables collection. -Set myModelTables = myModel.ModelTables - -'Now that we have a reference to the collection, let's select one of our tables using the item Method. -Set myModelTable = myModelTables.Item(1) - -'We could have also used this method. -'Set myModelTable = myModel.ModelTables.Item(1) - -'Let's create a new measure in our PowerPivot Model. First we need to create a reference to -'the Model Measures collection -Set myModelMeasures = myModel.ModelMeasures - - 'We can now call the add method to add a new measure. - myModelMeasures.Add MeasureName:="TotalTransactionCount", _ - AssociatedTable:=myModelTable, _ - Formula:="Sum(Table1[Transaction])", _ - FormatInformation:=myModel.ModelFormatDecimalNumber, _ - Description:="This is count of all my transactions." - -End Sub +Sub ReferencePPM() +Dim myModel As Model + +Set myModel = ActiveWorkbook.Model + Debug.Print myModel.Application + Debug.Print myModel.Name + Debug.Print myModel.Creator + Debug.Print myModel.DataModelConnection + +End Sub + +Sub AddAConnection() + +WrkName = ActiveWorkbook.Name +TblName = Sheets("Price_Data").ListObjects(1).Name +FilPath = ActiveWorkbook.Path + +ConnStr = "WORKSHEET;" + FilPath +CommTxt = WrkName + "!" + TblName + +'"WORKSHEET;C:\Users\305197\Desktop\PowerPivot.xlsm" +Workbooks("PowerPivot.xlsm").Connections.Add2 _ + Name:="MyConnectionToData", _ + Description:="This is my price dataset.", _ + ConnectionString:=ConnStr, _ + CommandText:=CommTxt, _ + lCmdtype:=xlCmdExcel, _ + CreateModelConnection:=True, _ + ImportRelationships:=False + +End Sub + +Sub AddMeasureToPowerPivot() + +'Declare your variables. +Dim myModel As Model +Dim myModelTables As ModelTables +Dim myModelMeasures As ModelMeasures +Dim myModelTable As ModelTable + +'Create a reference to the PowerPivot Model +Set myModel = ActiveWorkbook.Model + +'Create a reference to the ModelTables collection. +Set myModelTables = myModel.ModelTables + +'Now that we have a reference to the collection, let's select one of our tables using the item Method. +Set myModelTable = myModelTables.Item(1) + +'We could have also used this method. +'Set myModelTable = myModel.ModelTables.Item(1) + +'Let's create a new measure in our PowerPivot Model. First we need to create a reference to +'the Model Measures collection +Set myModelMeasures = myModel.ModelMeasures + + 'We can now call the add method to add a new measure. + myModelMeasures.Add MeasureName:="TotalTransactionCount", _ + AssociatedTable:=myModelTable, _ + Formula:="Sum(Table1[Transaction])", _ + FormatInformation:=myModel.ModelFormatDecimalNumber, _ + Description:="This is count of all my transactions." + +End Sub diff --git a/vba/excel-vba/power-pivot/Power Pivot - Part 2.bas b/vba/vba-excel/power-pivot/Power Pivot Part 2.bas similarity index 100% rename from vba/excel-vba/power-pivot/Power Pivot - Part 2.bas rename to vba/vba-excel/power-pivot/Power Pivot Part 2.bas diff --git a/vba/excel-vba/power-pivot/Power Pivot - Part 3.bas b/vba/vba-excel/power-pivot/Power Pivot Part 3.bas similarity index 100% rename from vba/excel-vba/power-pivot/Power Pivot - Part 3.bas rename to vba/vba-excel/power-pivot/Power Pivot Part 3.bas diff --git a/vba/excel-vba/power-query/Import Text File.bas b/vba/vba-excel/power-query/Power Query - Import Text File.bas similarity index 97% rename from vba/excel-vba/power-query/Import Text File.bas rename to vba/vba-excel/power-query/Power Query - Import Text File.bas index e39f4a3..e00f72c 100644 --- a/vba/excel-vba/power-query/Import Text File.bas +++ b/vba/vba-excel/power-query/Power Query - Import Text File.bas @@ -1,46 +1,46 @@ -Attribute VB_Name = "ImportTextFilePowerQuery" -Option Explicit - -Sub ImportTextFile() - -'Declare Our Variables -Dim QueryName, SourceFormula, ConnStr As String - -'Create a New Active Query, define the name and the formula -QueryName = "SalesDataPull" -SourceFormula = "let Source = Csv.Document(File.Contents(""C:\Users\Alex\Desktop\SalesData.txt""), " & _ - "[Delimiter=""#(tab)"", " & _ - "Columns=5, " & _ - "Encoding=1200, " & _ - "QuoteStyle=QuoteStyle.None]), " & _ - "#""Promoted Headers"" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]), " & _ - "#""Changed Type"" = Table.TransformColumnTypes(#""Promoted Headers"",{{""FY"", Int64.Type}, " & _ - "{""Per"", Int64.Type}, {""Jrnl Dt"", Int64.Type}, {""Amount"", type number}, {""Acct Descr"", type text}}) in #""Changed Type""" - -'Add that new query to the workbook. -ActiveWorkbook.Queries.Add Name:=QueryName, _ - Formula:=SourceFormula, _ - Description:="This query will pull my sales data" - -'Create the connection string -ConnStr = "OLEDB;" & _ - "Provider=Microsoft.Mashup.OleDb.1;" & _ - "Data Source=$Workbook$;" & _ - "Location=""SalesDataPull"";" & _ - "Extended Properties=""""" - -'Add a Query Table to our Worksheet -With ActiveSheet.ListObjects.Add(SourceType:=xlSrcExternal, _ - LinkSource:=True, _ - xlListObjectHasHeaders:=xlYes, _ - Source:=ConnStr, _ - Destination:=Range("$A$1")).QueryTable - .CommandType = xlCmdSql - .CommandText = Array("SELECT * FROM [SalesDataPull]") - .Refresh BackgroundQuery:=False -End With - -End Sub - - - +Attribute VB_Name = "ImportTextFilePowerQuery" +Option Explicit + +Sub ImportTextFile() + +'Declare Our Variables +Dim QueryName, SourceFormula, ConnStr As String + +'Create a New Active Query, define the name and the formula +QueryName = "SalesDataPull" +SourceFormula = "let Source = Csv.Document(File.Contents(""C:\Users\Alex\Desktop\SalesData.txt""), " & _ + "[Delimiter=""#(tab)"", " & _ + "Columns=5, " & _ + "Encoding=1200, " & _ + "QuoteStyle=QuoteStyle.None]), " & _ + "#""Promoted Headers"" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]), " & _ + "#""Changed Type"" = Table.TransformColumnTypes(#""Promoted Headers"",{{""FY"", Int64.Type}, " & _ + "{""Per"", Int64.Type}, {""Jrnl Dt"", Int64.Type}, {""Amount"", type number}, {""Acct Descr"", type text}}) in #""Changed Type""" + +'Add that new query to the workbook. +ActiveWorkbook.Queries.Add Name:=QueryName, _ + Formula:=SourceFormula, _ + Description:="This query will pull my sales data" + +'Create the connection string +ConnStr = "OLEDB;" & _ + "Provider=Microsoft.Mashup.OleDb.1;" & _ + "Data Source=$Workbook$;" & _ + "Location=""SalesDataPull"";" & _ + "Extended Properties=""""" + +'Add a Query Table to our Worksheet +With ActiveSheet.ListObjects.Add(SourceType:=xlSrcExternal, _ + LinkSource:=True, _ + xlListObjectHasHeaders:=xlYes, _ + Source:=ConnStr, _ + Destination:=Range("$A$1")).QueryTable + .CommandType = xlCmdSql + .CommandText = Array("SELECT * FROM [SalesDataPull]") + .Refresh BackgroundQuery:=False +End With + +End Sub + + + diff --git a/vba/excel-vba/power-query/Query Table Info.bas b/vba/vba-excel/power-query/Power Query - Query Table Object.bas similarity index 97% rename from vba/excel-vba/power-query/Query Table Info.bas rename to vba/vba-excel/power-query/Power Query - Query Table Object.bas index 78abad4..fa6d5f8 100644 --- a/vba/excel-vba/power-query/Query Table Info.bas +++ b/vba/vba-excel/power-query/Power Query - Query Table Object.bas @@ -1,37 +1,37 @@ -Option Explicit - -Sub GetInfoAboutMyQueryTable() - -With ActiveSheet.ListObjects(1) - - 'Use the SourceDataFile Property to get the path to the source data file. - MsgBox .QueryTable.SourceDataFile - - 'Use the SourceConnectionFile Property to get the path to the connection file you exported. - MsgBox .QueryTable.SourceConnectionFile - - 'Use the Connection Property to find out the connection string used in this QueryTable. - MsgBox .QueryTable.Connection - - 'Use the Creator Property -- USED FOR MACS -- To see which application created this QueryTable. - MsgBox .QueryTable.Creator - - 'Get the workbook connection used in this QueryTable - MsgBox .QueryTable.WorkbookConnection - - 'Get the Result Range of My Query. - MsgBox .QueryTable.ResultRange.Address - - 'Get the QueryType of My Query - MsgBox .QueryTable.QueryType - - 'xlADORecordset 7 Based on an ADO recordset query - 'xlDAORecordset 2 Based on a DAO recordset query, for query tables only - 'xlODBCQuery 1 Based on an ODBC data source - 'xlOLEDBQuery 5 Based on an OLE DB query, including OLAP data sources - 'xlTextImport 6 Based on a text file, for query tables only - 'xlWebQuery 4 Based on a Web page, for query tables only - -End With - -End Sub +Option Explicit + +Sub GetInfoAboutMyQueryTable() + +With ActiveSheet.ListObjects(1) + + 'Use the SourceDataFile Property to get the path to the source data file. + MsgBox .QueryTable.SourceDataFile + + 'Use the SourceConnectionFile Property to get the path to the connection file you exported. + MsgBox .QueryTable.SourceConnectionFile + + 'Use the Connection Property to find out the connection string used in this QueryTable. + MsgBox .QueryTable.Connection + + 'Use the Creator Property -- USED FOR MACS -- To see which application created this QueryTable. + MsgBox .QueryTable.Creator + + 'Get the workbook connection used in this QueryTable + MsgBox .QueryTable.WorkbookConnection + + 'Get the Result Range of My Query. + MsgBox .QueryTable.ResultRange.Address + + 'Get the QueryType of My Query + MsgBox .QueryTable.QueryType + + 'xlADORecordset 7 Based on an ADO recordset query + 'xlDAORecordset 2 Based on a DAO recordset query, for query tables only + 'xlODBCQuery 1 Based on an ODBC data source + 'xlOLEDBQuery 5 Based on an OLE DB query, including OLAP data sources + 'xlTextImport 6 Based on a text file, for query tables only + 'xlWebQuery 4 Based on a Web page, for query tables only + +End With + +End Sub diff --git a/vba/excel-vba/core-concepts/ranges/Selecting Ranges - Book.bas b/vba/vba-excel/range/Selecting Ranges - Book.bas similarity index 97% rename from vba/excel-vba/core-concepts/ranges/Selecting Ranges - Book.bas rename to vba/vba-excel/range/Selecting Ranges - Book.bas index 7d2898e..43c8488 100644 --- a/vba/excel-vba/core-concepts/ranges/Selecting Ranges - Book.bas +++ b/vba/vba-excel/range/Selecting Ranges - Book.bas @@ -1,78 +1,78 @@ -Attribute VB_Name = "Module1" -Sub SelectingRanges_ObjectHierarchy() - - 'The most explicit way to reference a range of cells. - Application.Workbooks("SelectingRangesBook.xlsm").Worksheets("Sheet1").Range("A1").Select - - 'Still very explict but can be confusing for sure because we need to keep in mind whether we have a personal macro workbook or not - Application.Workbooks(2).Worksheets(1).Range("B1").Select - - 'Less Explicit, ThisWorkbook is referring to the workbook that contains our subroutine - Application.ThisWorkbook.Worksheets(1).Range("C1").Select - - 'Less Explicit, ActiveWorkbook is referring to the workbook that is open and we see. - Application.ActiveWorkbook.Worksheets(1).Range("B1").Select - - - 'We can even be less explicit in our code, but then VBA will fill in the blanks. Which is a good and bad. - - - 'Forget the application - Workbooks("SelectingRangesBook.xlsm").Worksheets("Sheet1").Range("A2").Select '<<< This is how it looks in VBA's eyes Application.Workbooks("SelectingRangesBook.xlsm").Worksheets("Sheet1").Range("B1").Select - - 'Forget the workbook - Worksheets("Sheet1").Range("A2").Select '<<< This is how it looks in VBA's eyes Application.ActiveWorkbook.Worksheets("Sheet1").Range("B1").Select - - 'Forget the worksheet - 'Range("A2").Select '<<< This is how it looks in VBA's eyes Application.ActiveWorkbook.ActiveWorksheet.Range("A2").Select - - - 'If you use the Select method to select cells, be aware that Select works only on the active worksheet. - -End Sub - - -Sub SelectingWorkbooks() - - ' The application object has a collection that houses all of our workbooks, its called "WORKBOOKS" - ' To access this collection, we call the Application and then the property Workbooks. - ' This collection does not contain add-in workbooks (.xla) and workbooks in protected view are not a member of this collection. - - ' --- "Application.Workbooks" - - ' If we don't use an object qualifier for this property it's equivalent to using "Application.Workbooks" - - ' --- "Workbooks" is the same as "Application.Workbooks" we just are dropping the "Application" object. - - - ' SELECTING INDIVIDUAL WORKBOOKS FROM THE WORKBOOK COLLECTIONS - - ' The Explict way - Using the KEY METHOD - Application.Workbooks("SelectingWorkbooks.xlsx").Activate - Application.Workbooks("SelectingWorkbooks2.xlsx").Activate - ' Workbooks("SelectingWorkbooks.xlsx").Activate <<< Also Works - ' Workbooks("SelectingWorkbooks2.xlsx").Activate <<< Also Works - - ' The Less Explict way - Using the INDEX METHOD. - ' NOTE ONE: Index is determined by the order in which my workbooks were open. - ' NOTE TWO: If you have a PERSONAL.XSLB then this is ALSO a workbook in your collection and it is ALWAYS OPENED FIRST - - Application.Workbooks(1).Activate '<<< This is my Personal Macro Workbook and this workbook is ALWAYS OPENED FIRST - Application.Workbooks(2).Activate '<<< This is my workbook that was opened SECOND and it is named "SelectingWorkbooks.xlsx" - Application.Workbooks(3).Activate '<<< This is my workbook that was opened THIRD and it is named "SelectingWorkbooks2.xlsx" - ' Workbooks(1).Activate '<<< Also Works - ' Workbooks(2).Activate '<<< Also Works - ' Workbooks(3).Activate '<<< Also Works - - - ' Using the ActiveWorkbook Method - ' NOTE ONE: The ActiveWorkbook is the one that is opened and we can see on our screen. - ActiveWorkbook.Worksheets("Sheet1").Range("A1").Value = 7000 - - ' Using the ThisWorkbook Method - ' NOTE ONE: The ThisWorkbook is the one that houses our code. - ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = 7000 - - -End Sub - +Attribute VB_Name = "Module1" +Sub SelectingRanges_ObjectHierarchy() + + 'The most explicit way to reference a range of cells. + Application.Workbooks("SelectingRangesBook.xlsm").Worksheets("Sheet1").Range("A1").Select + + 'Still very explict but can be confusing for sure because we need to keep in mind whether we have a personal macro workbook or not + Application.Workbooks(2).Worksheets(1).Range("B1").Select + + 'Less Explicit, ThisWorkbook is referring to the workbook that contains our subroutine + Application.ThisWorkbook.Worksheets(1).Range("C1").Select + + 'Less Explicit, ActiveWorkbook is referring to the workbook that is open and we see. + Application.ActiveWorkbook.Worksheets(1).Range("B1").Select + + + 'We can even be less explicit in our code, but then VBA will fill in the blanks. Which is a good and bad. + + + 'Forget the application + Workbooks("SelectingRangesBook.xlsm").Worksheets("Sheet1").Range("A2").Select '<<< This is how it looks in VBA's eyes Application.Workbooks("SelectingRangesBook.xlsm").Worksheets("Sheet1").Range("B1").Select + + 'Forget the workbook + Worksheets("Sheet1").Range("A2").Select '<<< This is how it looks in VBA's eyes Application.ActiveWorkbook.Worksheets("Sheet1").Range("B1").Select + + 'Forget the worksheet + 'Range("A2").Select '<<< This is how it looks in VBA's eyes Application.ActiveWorkbook.ActiveWorksheet.Range("A2").Select + + + 'If you use the Select method to select cells, be aware that Select works only on the active worksheet. + +End Sub + + +Sub SelectingWorkbooks() + + ' The application object has a collection that houses all of our workbooks, its called "WORKBOOKS" + ' To access this collection, we call the Application and then the property Workbooks. + ' This collection does not contain add-in workbooks (.xla) and workbooks in protected view are not a member of this collection. + + ' --- "Application.Workbooks" + + ' If we don't use an object qualifier for this property it's equivalent to using "Application.Workbooks" + + ' --- "Workbooks" is the same as "Application.Workbooks" we just are dropping the "Application" object. + + + ' SELECTING INDIVIDUAL WORKBOOKS FROM THE WORKBOOK COLLECTIONS + + ' The Explict way - Using the KEY METHOD + Application.Workbooks("SelectingWorkbooks.xlsx").Activate + Application.Workbooks("SelectingWorkbooks2.xlsx").Activate + ' Workbooks("SelectingWorkbooks.xlsx").Activate <<< Also Works + ' Workbooks("SelectingWorkbooks2.xlsx").Activate <<< Also Works + + ' The Less Explict way - Using the INDEX METHOD. + ' NOTE ONE: Index is determined by the order in which my workbooks were open. + ' NOTE TWO: If you have a PERSONAL.XSLB then this is ALSO a workbook in your collection and it is ALWAYS OPENED FIRST + + Application.Workbooks(1).Activate '<<< This is my Personal Macro Workbook and this workbook is ALWAYS OPENED FIRST + Application.Workbooks(2).Activate '<<< This is my workbook that was opened SECOND and it is named "SelectingWorkbooks.xlsx" + Application.Workbooks(3).Activate '<<< This is my workbook that was opened THIRD and it is named "SelectingWorkbooks2.xlsx" + ' Workbooks(1).Activate '<<< Also Works + ' Workbooks(2).Activate '<<< Also Works + ' Workbooks(3).Activate '<<< Also Works + + + ' Using the ActiveWorkbook Method + ' NOTE ONE: The ActiveWorkbook is the one that is opened and we can see on our screen. + ActiveWorkbook.Worksheets("Sheet1").Range("A1").Value = 7000 + + ' Using the ThisWorkbook Method + ' NOTE ONE: The ThisWorkbook is the one that houses our code. + ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = 7000 + + +End Sub + diff --git a/vba/excel-vba/core-concepts/ranges/Selecting Ranges - Last.bas b/vba/vba-excel/range/Selecting Ranges - Last.bas similarity index 96% rename from vba/excel-vba/core-concepts/ranges/Selecting Ranges - Last.bas rename to vba/vba-excel/range/Selecting Ranges - Last.bas index 7208478..e79e845 100644 --- a/vba/excel-vba/core-concepts/ranges/Selecting Ranges - Last.bas +++ b/vba/vba-excel/range/Selecting Ranges - Last.bas @@ -1,72 +1,72 @@ -Attribute VB_Name = "SelectingLast" - -Sub SelectingLastCellOfContiguousRange() - - 'Go To last cell - ActiveSheet.Range("a1").End(xlDown).Select - -End Sub - -Sub SelectingBlankCellOfContiguousRange() - - 'Go to first blank cell after laste cell - ActiveSheet.Range("a1").End(xlDown).Offset(1, 0).Select - -End Sub - -Sub SelectEntireRangeofContiguousCells() - - 'Select Range Of Cells No Blanks - ActiveSheet.Range("a1", ActiveSheet.Range("a1").End(xlDown)).Select - ActiveSheet.Range("a1:" & ActiveSheet.Range("a1").End(xlDown).Address).Select - -End Sub - -Sub SelectEntireRangeofNonContiguousCells() - - 'Select Range of Cells That Includes Blanks - ActiveSheet.Range("a1", ActiveSheet.Range("a65536").End(xlUp)).Select - ActiveSheet.Range("a1:" & ActiveSheet.Range("a65536").End(xlUp).Address).Select - -End Sub - -Sub SelectEntire() - - 'Select Entire Row - Range("1:1").Select - - 'Select Entire Column - Range("A:A").Select - -End Sub - - -Sub SelectRectangularRange() - -'Select Current Region -'ActiveSheet.Range("a1").CurrentRegion.Select -'ActiveSheet.Range("a1", ActiveSheet.Range("a1").End(xlDown).End(xlToRight)).Select -'ActiveSheet.Range("a1:" & ActiveSheet.Range("a1").End(xlDown).End(xlToRight).Address).Select - -'Build Current Region -lastCol = ActiveSheet.Range("a1").End(xlToRight).Column -lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row -ActiveSheet.Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Select - -'Including a blank row -lastCol = ActiveSheet.Range("a1").End(xlToRight).Column -lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row -ActiveSheet.Range("a1:" & ActiveSheet.Cells(lastRow, lastCol).Address).Select - -End Sub - - -Sub SelectMultiNonContColumns() - -StartRange = "A1" -EndRange = "C1" -Set a = Range(StartRange, Range(StartRange).End(xlDown)) -Set b = Range(EndRange, Range(EndRange).End(xlDown)) -Union(a, b).Select - -End Sub +Attribute VB_Name = "SelectingLast" + +Sub SelectingLastCellOfContiguousRange() + + 'Go To last cell + ActiveSheet.Range("a1").End(xlDown).Select + +End Sub + +Sub SelectingBlankCellOfContiguousRange() + + 'Go to first blank cell after laste cell + ActiveSheet.Range("a1").End(xlDown).Offset(1, 0).Select + +End Sub + +Sub SelectEntireRangeofContiguousCells() + + 'Select Range Of Cells No Blanks + ActiveSheet.Range("a1", ActiveSheet.Range("a1").End(xlDown)).Select + ActiveSheet.Range("a1:" & ActiveSheet.Range("a1").End(xlDown).Address).Select + +End Sub + +Sub SelectEntireRangeofNonContiguousCells() + + 'Select Range of Cells That Includes Blanks + ActiveSheet.Range("a1", ActiveSheet.Range("a65536").End(xlUp)).Select + ActiveSheet.Range("a1:" & ActiveSheet.Range("a65536").End(xlUp).Address).Select + +End Sub + +Sub SelectEntire() + + 'Select Entire Row + Range("1:1").Select + + 'Select Entire Column + Range("A:A").Select + +End Sub + + +Sub SelectRectangularRange() + +'Select Current Region +'ActiveSheet.Range("a1").CurrentRegion.Select +'ActiveSheet.Range("a1", ActiveSheet.Range("a1").End(xlDown).End(xlToRight)).Select +'ActiveSheet.Range("a1:" & ActiveSheet.Range("a1").End(xlDown).End(xlToRight).Address).Select + +'Build Current Region +lastCol = ActiveSheet.Range("a1").End(xlToRight).Column +lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row +ActiveSheet.Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Select + +'Including a blank row +lastCol = ActiveSheet.Range("a1").End(xlToRight).Column +lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row +ActiveSheet.Range("a1:" & ActiveSheet.Cells(lastRow, lastCol).Address).Select + +End Sub + + +Sub SelectMultiNonContColumns() + +StartRange = "A1" +EndRange = "C1" +Set a = Range(StartRange, Range(StartRange).End(xlDown)) +Set b = Range(EndRange, Range(EndRange).End(xlDown)) +Union(a, b).Select + +End Sub diff --git a/vba/excel-vba/core-concepts/ranges/Selecting Ranges - Offset.bas b/vba/vba-excel/range/Selecting Ranges - Offset.bas similarity index 95% rename from vba/excel-vba/core-concepts/ranges/Selecting Ranges - Offset.bas rename to vba/vba-excel/range/Selecting Ranges - Offset.bas index 32edcb6..ca35985 100644 --- a/vba/excel-vba/core-concepts/ranges/Selecting Ranges - Offset.bas +++ b/vba/vba-excel/range/Selecting Ranges - Offset.bas @@ -1,77 +1,75 @@ -Attribute VB_Name = "Offset" -Sub OffsetActiveCell() - -'Go 5 rows below & 4 columns to the left -ActiveCell.Offset(5, -4).Select - -'Go 2 rows above & 3 columns to the right -ActiveCell.Offset(-2, 3).Select - -'Error occurs if the row you're selecting is off the sheet. - -End Sub - -Sub OffsetCell() - -'Go 5 rows below & 4 columns to the right -ActiveSheet.Cells(7, 3).Offset(5, 4).Select - -'Go 5 rows below & 4 columns to the right -ActiveSheet.Range("C7").Offset(5, 4).Select - -End Sub - - -Sub OffsetRangeOfCell() - -'Go 4 rows below & 3 columns to the right - MAINTAING THE SAME RANGE SIZE -ActiveSheet.Range("Test").Offset(4, 3).Select - -'Long handed way -'Go 4 rows below & 3 columns to the right - MAINTAING THE SAME RANGE SIZE -Sheets("Sheet2").Activate -ActiveSheet.Range("Test").Offset(4, 3).Select - -End Sub - -Sub ResizeSelection() - -'Select the range -Range("Test").Select - -'Resize the selection by five rows -Selection.Resize(Selection.Rows.Count + 5, Selection.Columns.Count).Select - -End Sub - - -Sub ResizeSelectionOffset() - -'Select the range -Range("Test").Select - -'Offset and then resize the selection by five rows -Selection.Offset(4, 3).Resize(Selection.Rows.Count + 5, Selection.Columns.Count).Select - -End Sub - - -Sub SelectUnionOfTwoOrMoreRanges() - -Application.Union(Range("Test"), Range("Sample")).Select - -'DOES NOT WORK ACROSS SHEETS -Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet1!C3:D4")) -Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet2!C3:D4")) - - -End Sub - - - -Sub SelectIntersection() - -'DOES NOT WORK ACROSS SHEETS -Application.Intersect(Range("Test"), Range("Sample")).Select - -End Sub +Attribute VB_Name = "Offset" +Sub OffsetActiveCell() + +'Go 5 rows below & 4 columns to the left +ActiveCell.Offset(5, -4).Select + +'Go 2 rows above & 3 columns to the right +ActiveCell.Offset(-2, 3).Select + +'Error occurs if the row you're selecting is off the sheet. + +End Sub + +Sub OffsetCell() + +'Go 5 rows below & 4 columns to the right +ActiveSheet.Cells(7, 3).Offset(5, 4).Select + +'Go 5 rows below & 4 columns to the right +ActiveSheet.Range("C7").Offset(5, 4).Select + +End Sub + + +Sub OffsetRangeOfCell() + +'Go 4 rows below & 3 columns to the right - MAINTAING THE SAME RANGE SIZE +ActiveSheet.Range("Test").Offset(4, 3).Select + +'Long handed way +'Go 4 rows below & 3 columns to the right - MAINTAING THE SAME RANGE SIZE +Sheets("Sheet2").Activate +ActiveSheet.Range("Test").Offset(4, 3).Select + +End Sub + +Sub ResizeSelection() + +'Select the range +Range("Test").Select + +'Resize the selection by five rows +Selection.Resize(Selection.Rows.Count + 5, Selection.Columns.Count).Select + +End Sub + + +Sub ResizeSelectionOffset() + +'Select the range +Range("Test").Select + +'Offset and then resize the selection by five rows +Selection.Offset(4, 3).Resize(Selection.Rows.Count + 5, Selection.Columns.Count).Select + +End Sub + + +Sub SelectUnionOfTwoOrMoreRanges() + +Application.Union(Range("Test"), Range("Sample")).Select + +'DOES NOT WORK ACROSS SHEETS +Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet1!C3:D4")) +Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet2!C3:D4")) + +End Sub + + +Sub SelectIntersection() + +'DOES NOT WORK ACROSS SHEETS +Application.Intersect(Range("Test"), Range("Sample")).Select + +End Sub diff --git a/vba/excel-vba/core-concepts/ranges/Selecting Ranges - Selecting Cells.bas b/vba/vba-excel/range/Selecting Ranges - Selecting Cells.bas similarity index 96% rename from vba/excel-vba/core-concepts/ranges/Selecting Ranges - Selecting Cells.bas rename to vba/vba-excel/range/Selecting Ranges - Selecting Cells.bas index 4bb003b..7fc833a 100644 --- a/vba/excel-vba/core-concepts/ranges/Selecting Ranges - Selecting Cells.bas +++ b/vba/vba-excel/range/Selecting Ranges - Selecting Cells.bas @@ -1,77 +1,77 @@ -Attribute VB_Name = "SelectingCells" -Sub SelectCellOnActiveSheet() - - ActiveSheet.Cells(2, 2).Select - ActiveSheet.Range("B3").Select - -End Sub - -Sub SelectCellOnDifferentSheet() - - Application.Goto ActiveWorkbook.Sheets("Sheet2").Cells(6, 5) - Application.Goto (ActiveWorkbook.Sheets("Sheet2").Range("E6")) - - 'The Long handed way - 'Sheets("Sheet2").Activate - 'ActiveSheet.Cells(6, 5).Select - -End Sub - -Sub SelectCellInDifferentWorkbook() - - Application.Goto Workbooks("BOOK2.xlsx").Sheets("Sheet1").Cells(7, 6) - Application.Goto Workbooks("BOOK2.xlsx").Sheets("Sheet1").Range("F7") - - 'The Long handed way - 'Workbooks("BOOK2.xlsx").Sheets("Sheet1").Activate - 'ActiveSheet.Cells(7, 6).Select - -End Sub - -Sub SelectRangeOfCells() - - ActiveSheet.Range(Cells(2, 3), Cells(10, 4)).Select - ActiveSheet.Range("C2:D10").Select - ActiveSheet.Range("C2", "D10").Select - -End Sub - -Sub SelectRangeOfCellsDifferentSheet() - - Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3:E11") - Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3", "E11") - - 'The Long handed way - 'Sheets("Sheet3").Activate - 'ActiveSheet.Range(Cells(3, 4), Cells(11, 5)).Select - -End Sub - -Sub SelectRangeOfCellsDifferentWorkbook() - - Application.Goto Workbooks("BOOK2.xlsx").Sheets("Sheet1").Range("E4:F12") - Application.Goto Workbooks("BOOK2.xlsx").Sheets("Sheet1").Range("E4", "F12") - - 'The Long handed way - 'Workbooks("BOOK2.xlsx").Sheets("Sheet1").Activate - 'ActiveSheet.Range(Cells(4, 5), Cells(12, 6)).Select - -End Sub - -Sub SelectingNamedRange() - - 'ActiveSheet - Range("Test").Select - 'Application.Goto "Test" - - 'Different Worksheet, Same Workbook - Application.Goto Sheets("Sheet1").Range("Test2") - 'Sheets("Sheet1").Activate - 'Range("Test2").Select - - 'Different Worksheet, Different Workbook - Application.Goto Workbooks("BOOK2.xlsx").Sheets("Sheet2").Range("Test") - 'Workbooks("BOOK2.xlsx").Sheets("Sheet2").Activate - 'ActiveSheet.Range("Test").Select - -End Sub +Attribute VB_Name = "SelectingCells" +Sub SelectCellOnActiveSheet() + + ActiveSheet.Cells(2, 2).Select + ActiveSheet.Range("B3").Select + +End Sub + +Sub SelectCellOnDifferentSheet() + + Application.Goto ActiveWorkbook.Sheets("Sheet2").Cells(6, 5) + Application.Goto (ActiveWorkbook.Sheets("Sheet2").Range("E6")) + + 'The Long handed way + 'Sheets("Sheet2").Activate + 'ActiveSheet.Cells(6, 5).Select + +End Sub + +Sub SelectCellInDifferentWorkbook() + + Application.Goto Workbooks("BOOK2.xlsx").Sheets("Sheet1").Cells(7, 6) + Application.Goto Workbooks("BOOK2.xlsx").Sheets("Sheet1").Range("F7") + + 'The Long handed way + 'Workbooks("BOOK2.xlsx").Sheets("Sheet1").Activate + 'ActiveSheet.Cells(7, 6).Select + +End Sub + +Sub SelectRangeOfCells() + + ActiveSheet.Range(Cells(2, 3), Cells(10, 4)).Select + ActiveSheet.Range("C2:D10").Select + ActiveSheet.Range("C2", "D10").Select + +End Sub + +Sub SelectRangeOfCellsDifferentSheet() + + Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3:E11") + Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3", "E11") + + 'The Long handed way + 'Sheets("Sheet3").Activate + 'ActiveSheet.Range(Cells(3, 4), Cells(11, 5)).Select + +End Sub + +Sub SelectRangeOfCellsDifferentWorkbook() + + Application.Goto Workbooks("BOOK2.xlsx").Sheets("Sheet1").Range("E4:F12") + Application.Goto Workbooks("BOOK2.xlsx").Sheets("Sheet1").Range("E4", "F12") + + 'The Long handed way + 'Workbooks("BOOK2.xlsx").Sheets("Sheet1").Activate + 'ActiveSheet.Range(Cells(4, 5), Cells(12, 6)).Select + +End Sub + +Sub SelectingNamedRange() + + 'ActiveSheet + Range("Test").Select + 'Application.Goto "Test" + + 'Different Worksheet, Same Workbook + Application.Goto Sheets("Sheet1").Range("Test2") + 'Sheets("Sheet1").Activate + 'Range("Test2").Select + + 'Different Worksheet, Different Workbook + Application.Goto Workbooks("BOOK2.xlsx").Sheets("Sheet2").Range("Test") + 'Workbooks("BOOK2.xlsx").Sheets("Sheet2").Activate + 'ActiveSheet.Range("Test").Select + +End Sub diff --git a/vba/excel-vba/core-concepts/Loop Through Sheets And Books.bas b/vba/vba-excel/workbook/Loop Through Sheets And Books.bas similarity index 96% rename from vba/excel-vba/core-concepts/Loop Through Sheets And Books.bas rename to vba/vba-excel/workbook/Loop Through Sheets And Books.bas index bfcc82a..99b1d6e 100644 --- a/vba/excel-vba/core-concepts/Loop Through Sheets And Books.bas +++ b/vba/vba-excel/workbook/Loop Through Sheets And Books.bas @@ -1,93 +1,93 @@ -Attribute VB_Name = "Module1" -Sub LoopThroughWorksheets_Method1() - - ' -------------------------------------------------------------------------------------------------------------- - 'If I want to declare a collection variable I have to declare it as a "SHEETS" collection object. - 'This is because the "WORKSHEETS" property that is returned from a "WORKBOOK" object is a "SHEETS" - 'collection, not a "WORKSHEETS" collection. A "SHEETS" collection object CONTAINS BOTH WORKSHEET OBJECTS - '& CHART SHEET OBJECTS. - ' -------------------------------------------------------------------------------------------------------------- - - Dim WrkShtCol As Sheets - Dim WrkSht As Worksheet - - Set WrkShtCol = ActiveWorkbook.Worksheets - - For Each WrkSht In WrkShtCol - - WrkSht.Range("A1").Value = WrkSht.Name - - Next WrkSht - -End Sub - -Sub LoopThroughWorksheets_Method2() - - Dim WrkSht As Worksheet - - For Each WrkSht In ActiveWorkbook.Worksheets '<<< THIS IS STILL RETURNING A SHEETS COLLECTION OBJECT - - WrkSht.Range("A1").Value = WrkSht.Name - - Next WrkSht - -End Sub - -Sub LoopThroughWorksheets_Method3() - - ' -------------------------------------------------------------------------------------------------------------- - 'The "THISWORKBOOK" method will only work in the WORKBOOK THAT CONTAINS THE CODE. - 'For example, if I try to run this code while it is in my PERSONAL MACRO WORKBOOK, it will not work. - 'This is because the "THISWORKBOOK" property returns a "WORKBOOK" object that represents the - 'workbook where the CURRENT MACRO CODE IS RUNNING FROM. - ' -------------------------------------------------------------------------------------------------------------- - - Dim WrkSht As Worksheet - - For Each WrkSht In ThisWorkbook.Worksheets - - With WrkSht.Range("A1") - .Value = WrkSht.Name - .Font.Bold = True - End With - - Next WrkSht - -End Sub - -Sub LoopThroughWorksheets_Method4() - - Dim i As Integer - - For i = 1 To ActiveWorkbook.Worksheets.Count - - Worksheets(i).Range("A1").Value = "Hello" - - Next i - -End Sub - - -Sub LoopThroughWorksheets_Method5() - - Dim i As Integer - - For i = ActiveWorkbook.Worksheets.Count To 1 Step -1 - - Worksheets(i).Range("A1").Value = "Hello" - - Next i - -End Sub - -Sub LoopThroughWorksheets_Method6() - - Dim i As Integer - - For i = 1 To ActiveWorkbook.Worksheets.Count Step 2 - - Worksheets(i).Range("A1").Value = "Hello" - - Next i - -End Sub +Attribute VB_Name = "Module1" +Sub LoopThroughWorksheets_Method1() + + ' -------------------------------------------------------------------------------------------------------------- + 'If I want to declare a collection variable I have to declare it as a "SHEETS" collection object. + 'This is because the "WORKSHEETS" property that is returned from a "WORKBOOK" object is a "SHEETS" + 'collection, not a "WORKSHEETS" collection. A "SHEETS" collection object CONTAINS BOTH WORKSHEET OBJECTS + '& CHART SHEET OBJECTS. + ' -------------------------------------------------------------------------------------------------------------- + + Dim WrkShtCol As Sheets + Dim WrkSht As Worksheet + + Set WrkShtCol = ActiveWorkbook.Worksheets + + For Each WrkSht In WrkShtCol + + WrkSht.Range("A1").Value = WrkSht.Name + + Next WrkSht + +End Sub + +Sub LoopThroughWorksheets_Method2() + + Dim WrkSht As Worksheet + + For Each WrkSht In ActiveWorkbook.Worksheets '<<< THIS IS STILL RETURNING A SHEETS COLLECTION OBJECT + + WrkSht.Range("A1").Value = WrkSht.Name + + Next WrkSht + +End Sub + +Sub LoopThroughWorksheets_Method3() + + ' -------------------------------------------------------------------------------------------------------------- + 'The "THISWORKBOOK" method will only work in the WORKBOOK THAT CONTAINS THE CODE. + 'For example, if I try to run this code while it is in my PERSONAL MACRO WORKBOOK, it will not work. + 'This is because the "THISWORKBOOK" property returns a "WORKBOOK" object that represents the + 'workbook where the CURRENT MACRO CODE IS RUNNING FROM. + ' -------------------------------------------------------------------------------------------------------------- + + Dim WrkSht As Worksheet + + For Each WrkSht In ThisWorkbook.Worksheets + + With WrkSht.Range("A1") + .Value = WrkSht.Name + .Font.Bold = True + End With + + Next WrkSht + +End Sub + +Sub LoopThroughWorksheets_Method4() + + Dim i As Integer + + For i = 1 To ActiveWorkbook.Worksheets.Count + + Worksheets(i).Range("A1").Value = "Hello" + + Next i + +End Sub + + +Sub LoopThroughWorksheets_Method5() + + Dim i As Integer + + For i = ActiveWorkbook.Worksheets.Count To 1 Step -1 + + Worksheets(i).Range("A1").Value = "Hello" + + Next i + +End Sub + +Sub LoopThroughWorksheets_Method6() + + Dim i As Integer + + For i = 1 To ActiveWorkbook.Worksheets.Count Step 2 + + Worksheets(i).Range("A1").Value = "Hello" + + Next i + +End Sub diff --git a/vba/excel-vba/core-concepts/Selecting Workbooks.bas b/vba/vba-excel/workbook/Selecting Workbooks.bas similarity index 98% rename from vba/excel-vba/core-concepts/Selecting Workbooks.bas rename to vba/vba-excel/workbook/Selecting Workbooks.bas index 252bd23..6e40820 100644 --- a/vba/excel-vba/core-concepts/Selecting Workbooks.bas +++ b/vba/vba-excel/workbook/Selecting Workbooks.bas @@ -1,87 +1,87 @@ -Sub SelectingWorkbooks() - - ' The application object has a collection that houses all of our workbooks, its called "WORKBOOKS" - ' To access this collection, we call the Application and then the property Workbooks. - ' This collection does not contain add-in workbooks (.xla) and workbooks in protected view are not a member of this collection. - - ' --- "Application.Workbooks" - - ' If we don't use an object qualifier for this property it's equivalent to using "Application.Workbooks" - - ' --- "Workbooks" is the same as "Application.Workbooks" we just are dropping the "Application" object. - - - ' SELECTING INDIVIDUAL WORKBOOKS FROM THE WORKBOOK COLLECTIONS - - ' The Explict way - Using the KEY METHOD - Application.Workbooks("SelectingWorkbooks.xlsx").Activate - Application.Workbooks("SelectingWorkbooks2.xlsx").Activate - ' Workbooks("SelectingWorkbooks.xlsx").Activate <<< Also Works - ' Workbooks("SelectingWorkbooks2.xlsx").Activate <<< Also Works - - ' The Less Explict way - Using the INDEX METHOD. - ' NOTE ONE: Index is determined by the order in which my workbooks were open. - ' NOTE TWO: If you have a PERSONAL.XSLB then this is ALSO a workbook in your collection and it is ALWAYS OPENED FIRST - - Application.Workbooks(1).Activate '<<< This is my Personal Macro Workbook and this workbook is ALWAYS OPENED FIRST - Application.Workbooks(2).Activate '<<< This is my workbook that was opened SECOND and it is named "SelectingWorkbooks.xlsx" - Application.Workbooks(3).Activate '<<< This is my workbook that was opened THIRD and it is named "SelectingWorkbooks2.xlsx" - ' Workbooks(1).Activate '<<< Also Works - ' Workbooks(2).Activate '<<< Also Works - ' Workbooks(3).Activate '<<< Also Works - - - ' Using the ActiveWorkbook Method - ' NOTE ONE: The ActiveWorkbook is the one that is opened and we can see on our screen. - ActiveWorkbook.Worksheets("Sheet1").Range("A1").Value = 7000 - - ' Using the ThisWorkbook Method - ' NOTE ONE: The ThisWorkbook is the one that houses our code. - ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = 7000 - - -End Sub - -Sub SelectingWorkbookMethods() - - ' The application object has a collection that houses all of our workbooks, its called "WORKBOOKS" - ' To access this collection, we call the Application and then the property Workbooks. - ' This collection does not contain add-in workbooks (.xla) and workbooks in protected view are not a member of this collection. - - ' --- "Application.Workbooks" - - ' If we don't use an object qualifier for this property it's equivalent to using "Application.Workbooks" - - ' --- "Workbooks" is the same as "Application.Workbooks" we just are dropping the "Application" object. - - - ' SELECTING INDIVIDUAL WORKBOOKS FROM THE WORKBOOK COLLECTIONS - - ' The Explict way - Using the KEY METHOD - Application.Workbooks("SelectingWorkbooks.xlsx").Activate - Application.Workbooks("SelectingWorkbooks2.xlsx").Activate - ' Workbooks("SelectingWorkbooks.xlsx").Activate <<< Also Works - ' Workbooks("SelectingWorkbooks2.xlsx").Activate <<< Also Works - - ' The Less Explict way - Using the INDEX METHOD. - ' NOTE ONE: Index is determined by the order in which my workbooks were open. - ' NOTE TWO: If you have a PERSONAL.XSLB then this is ALSO a workbook in your collection and it is ALWAYS OPENED FIRST - - Application.Workbooks(1).Activate '<<< This is my Personal Macro Workbook and this workbook is ALWAYS OPENED FIRST - Application.Workbooks(2).Activate '<<< This is my workbook that was opened SECOND and it is named "SelectingWorkbooks.xlsx" - Application.Workbooks(3).Activate '<<< This is my workbook that was opened THIRD and it is named "SelectingWorkbooks2.xlsx" - ' Workbooks(1).Activate '<<< Also Works - ' Workbooks(2).Activate '<<< Also Works - ' Workbooks(3).Activate '<<< Also Works - - - ' Using the ActiveWorkbook Method - ' NOTE ONE: The ActiveWorkbook is the one that is opened and we can see on our screen. - ActiveWorkbook.Worksheets("Sheet1").Range("A1").Value = 7000 - - ' Using the ThisWorkbook Method - ' NOTE ONE: The ThisWorkbook is the one that houses our code. - ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = 7000 - - -End Sub +Sub SelectingWorkbooks() + + ' The application object has a collection that houses all of our workbooks, its called "WORKBOOKS" + ' To access this collection, we call the Application and then the property Workbooks. + ' This collection does not contain add-in workbooks (.xla) and workbooks in protected view are not a member of this collection. + + ' --- "Application.Workbooks" + + ' If we don't use an object qualifier for this property it's equivalent to using "Application.Workbooks" + + ' --- "Workbooks" is the same as "Application.Workbooks" we just are dropping the "Application" object. + + + ' SELECTING INDIVIDUAL WORKBOOKS FROM THE WORKBOOK COLLECTIONS + + ' The Explict way - Using the KEY METHOD + Application.Workbooks("SelectingWorkbooks.xlsx").Activate + Application.Workbooks("SelectingWorkbooks2.xlsx").Activate + ' Workbooks("SelectingWorkbooks.xlsx").Activate <<< Also Works + ' Workbooks("SelectingWorkbooks2.xlsx").Activate <<< Also Works + + ' The Less Explict way - Using the INDEX METHOD. + ' NOTE ONE: Index is determined by the order in which my workbooks were open. + ' NOTE TWO: If you have a PERSONAL.XSLB then this is ALSO a workbook in your collection and it is ALWAYS OPENED FIRST + + Application.Workbooks(1).Activate '<<< This is my Personal Macro Workbook and this workbook is ALWAYS OPENED FIRST + Application.Workbooks(2).Activate '<<< This is my workbook that was opened SECOND and it is named "SelectingWorkbooks.xlsx" + Application.Workbooks(3).Activate '<<< This is my workbook that was opened THIRD and it is named "SelectingWorkbooks2.xlsx" + ' Workbooks(1).Activate '<<< Also Works + ' Workbooks(2).Activate '<<< Also Works + ' Workbooks(3).Activate '<<< Also Works + + + ' Using the ActiveWorkbook Method + ' NOTE ONE: The ActiveWorkbook is the one that is opened and we can see on our screen. + ActiveWorkbook.Worksheets("Sheet1").Range("A1").Value = 7000 + + ' Using the ThisWorkbook Method + ' NOTE ONE: The ThisWorkbook is the one that houses our code. + ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = 7000 + + +End Sub + +Sub SelectingWorkbookMethods() + + ' The application object has a collection that houses all of our workbooks, its called "WORKBOOKS" + ' To access this collection, we call the Application and then the property Workbooks. + ' This collection does not contain add-in workbooks (.xla) and workbooks in protected view are not a member of this collection. + + ' --- "Application.Workbooks" + + ' If we don't use an object qualifier for this property it's equivalent to using "Application.Workbooks" + + ' --- "Workbooks" is the same as "Application.Workbooks" we just are dropping the "Application" object. + + + ' SELECTING INDIVIDUAL WORKBOOKS FROM THE WORKBOOK COLLECTIONS + + ' The Explict way - Using the KEY METHOD + Application.Workbooks("SelectingWorkbooks.xlsx").Activate + Application.Workbooks("SelectingWorkbooks2.xlsx").Activate + ' Workbooks("SelectingWorkbooks.xlsx").Activate <<< Also Works + ' Workbooks("SelectingWorkbooks2.xlsx").Activate <<< Also Works + + ' The Less Explict way - Using the INDEX METHOD. + ' NOTE ONE: Index is determined by the order in which my workbooks were open. + ' NOTE TWO: If you have a PERSONAL.XSLB then this is ALSO a workbook in your collection and it is ALWAYS OPENED FIRST + + Application.Workbooks(1).Activate '<<< This is my Personal Macro Workbook and this workbook is ALWAYS OPENED FIRST + Application.Workbooks(2).Activate '<<< This is my workbook that was opened SECOND and it is named "SelectingWorkbooks.xlsx" + Application.Workbooks(3).Activate '<<< This is my workbook that was opened THIRD and it is named "SelectingWorkbooks2.xlsx" + ' Workbooks(1).Activate '<<< Also Works + ' Workbooks(2).Activate '<<< Also Works + ' Workbooks(3).Activate '<<< Also Works + + + ' Using the ActiveWorkbook Method + ' NOTE ONE: The ActiveWorkbook is the one that is opened and we can see on our screen. + ActiveWorkbook.Worksheets("Sheet1").Range("A1").Value = 7000 + + ' Using the ThisWorkbook Method + ' NOTE ONE: The ThisWorkbook is the one that houses our code. + ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = 7000 + + +End Sub diff --git a/vba/excel-vba/core-concepts/Selecting Worksheets.bas b/vba/vba-excel/worksheet/Selecting Worksheets.bas similarity index 94% rename from vba/excel-vba/core-concepts/Selecting Worksheets.bas rename to vba/vba-excel/worksheet/Selecting Worksheets.bas index 308ed48..27bbcf6 100644 --- a/vba/excel-vba/core-concepts/Selecting Worksheets.bas +++ b/vba/vba-excel/worksheet/Selecting Worksheets.bas @@ -1,49 +1,49 @@ -Attribute VB_Name = "Module1" -Sub SelectWorkSheet_Method1() - - 'Worksheets Collection - Key Method - - Worksheets("Sheet2").Range("A1").Value = 300 - -End Sub - -Sub SelectWorksheet_Method2() - - 'Worksheets Collection - Index Method - - Worksheets(2).Range("A1").Value = 300 - -End Sub - -Sub SelectWorksheet_Method3() - - 'Sheets Collection - Key Method - - Sheets("Sheet1").Range("A1").Value = 300 - -End Sub - -Sub SelectWorksheet_Method4() - - 'Sheets Collection - Index Method - - Sheets(1).Range("A1").Value = 300 - -End Sub - -Sub SelectWorksheet_Method5() - - 'ActiveSheet Method - - ActiveSheet.Range("A1").Value = 300 - -End Sub - -Sub SelectWorksheet_Method6() - - 'Unqualified Object Name Method (Also Called CodeName Method) - 'WARNING - UNSTABLE WHEN YOU HAVE STORED IN A PERSONAL MACRO WORKBOOK - - Sheet1.Range("A1").Value = 300 - -End Sub +Attribute VB_Name = "Module1" +Sub SelectWorkSheet_Method1() + + 'Worksheets Collection - Key Method + + Worksheets("Sheet2").Range("A1").Value = 300 + +End Sub + +Sub SelectWorksheet_Method2() + + 'Worksheets Collection - Index Method + + Worksheets(2).Range("A1").Value = 300 + +End Sub + +Sub SelectWorksheet_Method3() + + 'Sheets Collection - Key Method + + Sheets("Sheet1").Range("A1").Value = 300 + +End Sub + +Sub SelectWorksheet_Method4() + + 'Sheets Collection - Index Method + + Sheets(1).Range("A1").Value = 300 + +End Sub + +Sub SelectWorksheet_Method5() + + 'ActiveSheet Method + + ActiveSheet.Range("A1").Value = 300 + +End Sub + +Sub SelectWorksheet_Method6() + + 'Unqualified Object Name Method (Also Called CodeName Method) + 'WARNING - UNSTABLE WHEN YOU HAVE STORED IN A PERSONAL MACRO WORKBOOK + + Sheet1.Range("A1").Value = 300 + +End Sub diff --git a/vba/powerpoint-vba/Excel Chart To PowerPoint.bas b/vba/vba-powerpoint/Excel to PowerPoint - Charts.bas similarity index 96% rename from vba/powerpoint-vba/Excel Chart To PowerPoint.bas rename to vba/vba-powerpoint/Excel to PowerPoint - Charts.bas index 9ae3a8b..bb772ed 100644 --- a/vba/powerpoint-vba/Excel Chart To PowerPoint.bas +++ b/vba/vba-powerpoint/Excel to PowerPoint - Charts.bas @@ -1,217 +1,216 @@ -Attribute VB_Name = "Module1" -Sub ExportChartToPowerPoint() - - ' OVERVIEW: - ' This script will create a new PowerPoint Presentation and copy the chart - ' we specify to the newly created PowerPoint Presentation. - - 'Declare PowerPoint Variables - Dim PPTApp As PowerPoint.Application - Dim PPTPres As PowerPoint.Presentation - Dim PPTSlide As PowerPoint.Slide - Dim PPTShape As PowerPoint.Shape - - 'Dim Excel Variables - Dim Chrt As ChartObject - - 'Create a new PowerPoint Application & make it visible. - Set PPTApp = New PowerPoint.Application - PPTApp.Visible = True - - 'Create a new presentation in the PowerPoint Application - Set PPTPres = PPTApp.Presentations.Add - - 'Create a new slide in the PowerPoint Presentation - Set PPTSlide = PPTPres.Slides.Add(1, ppLayoutBlank) - - 'Create a Chart Object variable where specify the sheet the chart is on and the index number of that chart. - Set Chrt = Worksheets("Charts_One").ChartObjects(1) - - 'Copy the Chart Object variable we specified above. - Chrt.Copy - - 'Paste the Chart Object on the Slide that we created above. - PPTSlide.Shapes.Paste - - -End Sub - -Sub ExportChartsToPowerPoint_SingleWorksheet() - - ' OVERVIEW: - ' This script will loop through all the Charts in the Active worksheet - ' and copy each Chart to a new PowerPoint presentation that we create. - ' Each chart will get their own individual slide and will be placed in the center of it. - - 'Declare PowerPoint Variables - Dim PPTApp As PowerPoint.Application - Dim PPTPres As PowerPoint.Presentation - Dim PPTSlide As PowerPoint.Slide - Dim PPTShape As PowerPoint.Shape - Dim SldIndex As Integer - - 'Declare Excel Variables - Dim Chrt As ChartObject - - 'Create new PowerPoint Application & make it visible. - Set PPTApp = New PowerPoint.Application - PPTApp.Visible = True - - 'Create new presentation in the PowerPoint application. - Set PPTPres = PPTApp.Presentations.Add - - 'Create an index handler for slide creation. - SldIndex = 1 - - 'Loop through all the CHARTOBJECTS in the ACTIVESHEET. - For Each Chrt In ActiveSheet.ChartObjects - - 'Copy the Chart - Chrt.Copy - - 'Create a new slide in the Presentation, set the layout to blank, and paste chart on to the newly added slide. - Set PPTSlide = PPTPres.Slides.Add(SldIndex, ppLayoutBlank) - PPTSlide.Shapes.Paste - - 'Increment index so that way we paste the next chart on the new slide that is added. - SldIndex = SldIndex + 1 - - Next Chrt - - -End Sub - - - -Sub ExportChartsToPowerPoint_MultipleWorksheets() - - ' OVERVIEW: - ' This script will loop through all the worksheets in the Active Workbook - ' and copy all the Charts to a new PowerPoint presentation that we create. - ' Each chart will get their own individual slide and will be placed in the center of it. - - 'Declare PowerPoint Variables - Dim PPTApp As PowerPoint.Application - Dim PPTPres As PowerPoint.Presentation - Dim PPTSlide As PowerPoint.Slide - Dim PPTShape As PowerPoint.Shape - Dim SldIndex As Integer - - 'Declare Excel Variables - Dim Chrt As ChartObject - Dim WrkSht As Worksheet - - 'Create new PowerPoint Application & make it visible. - Set PPTApp = New PowerPoint.Application - PPTApp.Visible = True - - 'Create new presentation in the PowerPoint application. - Set PPTPres = PPTApp.Presentations.Add - - 'Create an index handler for slide creation. - SldIndex = 1 - - 'Loop throught all the Worksheets in the Worksheets Collection. - For Each WrkSht In Worksheets - - 'Loop through all the CHARTOBJECTS in the ACTIVESHEET. - For Each Chrt In WrkSht.ChartObjects - - 'Copy the Chart - Chrt.Copy - - 'Create a new slide in the Presentation, set the layout to blank, and paste chart on to the newly added slide. - Set PPTSlide = PPTPres.Slides.Add(SldIndex, ppLayoutBlank) - PPTSlide.Shapes.Paste - - 'Increment index so that way we paste the next chart on the new slide that is added. - SldIndex = SldIndex + 1 - - Next Chrt - - Next WrkSht - -End Sub - - -Sub ExportChartToPowerPoint_PasteMethods() - - ' OVERVIEW: - ' This script will create a new PowerPoint Presentation and copy the chart - ' we specify to the newly created PowerPoint Presentation. - - 'Declare PowerPoint Variables - Dim PPTApp As PowerPoint.Application - Dim PPTPres As PowerPoint.Presentation - Dim PPTSlide As PowerPoint.Slide - Dim PPTShape As PowerPoint.Shape - - 'Dim Excel Variables - Dim Chrt As ChartObject - - 'Create a new PowerPoint Application & make it visible. - Set PPTApp = New PowerPoint.Application - PPTApp.Visible = True - - 'Create a new presentation in the PowerPoint Application - Set PPTPres = PPTApp.Presentations.Add - - 'Create a new slide in the PowerPoint Presentation - Set PPTSlide = PPTPres.Slides.Add(1, ppLayoutBlank) - - 'Create a Chart Object variable where specify the sheet the chart is on and the index number of that chart. - Set Chrt = Worksheets("Charts_One").ChartObjects(1) - - 'Copy the Chart. - Chrt.Copy - - 'Copy the Chart Area, use when we want to paste as an OLEObject. - 'Chrt.Chart.ChartArea.Copy - - 'PASTE USING REGULAR PASTE METHOD - - 'Use Paste method to Paste as Chart Object in PowerPoint - 'PPTSlide.Shapes.Paste - - 'PASTE USING PASTESPECIAL METHOD - - 'Paste as Bitmap - 'PPTSlide.Shapes.PasteSpecial DataType:=ppPasteBitmap - - 'Paste as Default - 'PPTSlide.Shapes.PasteSpecial DataType:=ppPasteDefault - - 'Paste as EnhancedMetafile - 'PPTSlide.Shapes.PasteSpecial DataType:=ppPasteEnhancedMetafile - - 'Paste as HTML - DOES NOT WORK WITH CHARTS - 'PPTSlide.Shapes.PasteSpecial DataType:=ppPasteHTML - - 'Paste as GIF - 'PPTSlide.Shapes.PasteSpecial DataType:=ppPasteGIF - - 'Paste as JPG - 'PPTSlide.Shapes.PasteSpecial DataType:=ppPasteJPG - - 'Paste as MetafilePicture - 'PPTSlide.Shapes.PasteSpecial DataType:=ppPasteMetafilePicture - - 'Paste as PNG - 'PPTSlide.Shapes.PasteSpecial DataType:=ppPastePNG - - 'Paste as Shape - 'PPTSlide.Shapes.PasteSpecial DataType:=ppPasteShape - - 'Paste as Shape and it is linked. - 'PPTSlide.Shapes.PasteSpecial DataType:=ppPasteShape, Link:=msoTrue - - 'Paste as Shape, display it as an icon, change the icon label, and make it a linked icon. - 'PPTSlide.Shapes.PasteSpecial DataType:=ppPasteShape, DisplayAsIcon:=True, IconLabel:="Link to my Chart", Link:=msoTrue - - 'Paste as OLEObject and it is linked. - PPTSlide.Shapes.PasteSpecial DataType:=ppPasteOLEObject, Link:=msoTrue - -End Sub - - - +Sub ExportChartToPowerPoint() + + ' OVERVIEW: + ' This script will create a new PowerPoint Presentation and copy the chart + ' we specify to the newly created PowerPoint Presentation. + + 'Declare PowerPoint Variables + Dim PPTApp As PowerPoint.Application + Dim PPTPres As PowerPoint.Presentation + Dim PPTSlide As PowerPoint.Slide + Dim PPTShape As PowerPoint.Shape + + 'Dim Excel Variables + Dim Chrt As ChartObject + + 'Create a new PowerPoint Application & make it visible. + Set PPTApp = New PowerPoint.Application + PPTApp.Visible = True + + 'Create a new presentation in the PowerPoint Application + Set PPTPres = PPTApp.Presentations.Add + + 'Create a new slide in the PowerPoint Presentation + Set PPTSlide = PPTPres.Slides.Add(1, ppLayoutBlank) + + 'Create a Chart Object variable where specify the sheet the chart is on and the index number of that chart. + Set Chrt = Worksheets("Charts_One").ChartObjects(1) + + 'Copy the Chart Object variable we specified above. + Chrt.Copy + + 'Paste the Chart Object on the Slide that we created above. + PPTSlide.Shapes.Paste + + +End Sub + +Sub ExportChartsToPowerPoint_SingleWorksheet() + + ' OVERVIEW: + ' This script will loop through all the Charts in the Active worksheet + ' and copy each Chart to a new PowerPoint presentation that we create. + ' Each chart will get their own individual slide and will be placed in the center of it. + + 'Declare PowerPoint Variables + Dim PPTApp As PowerPoint.Application + Dim PPTPres As PowerPoint.Presentation + Dim PPTSlide As PowerPoint.Slide + Dim PPTShape As PowerPoint.Shape + Dim SldIndex As Integer + + 'Declare Excel Variables + Dim Chrt As ChartObject + + 'Create new PowerPoint Application & make it visible. + Set PPTApp = New PowerPoint.Application + PPTApp.Visible = True + + 'Create new presentation in the PowerPoint application. + Set PPTPres = PPTApp.Presentations.Add + + 'Create an index handler for slide creation. + SldIndex = 1 + + 'Loop through all the CHARTOBJECTS in the ACTIVESHEET. + For Each Chrt In ActiveSheet.ChartObjects + + 'Copy the Chart + Chrt.Copy + + 'Create a new slide in the Presentation, set the layout to blank, and paste chart on to the newly added slide. + Set PPTSlide = PPTPres.Slides.Add(SldIndex, ppLayoutBlank) + PPTSlide.Shapes.Paste + + 'Increment index so that way we paste the next chart on the new slide that is added. + SldIndex = SldIndex + 1 + + Next Chrt + + +End Sub + + + +Sub ExportChartsToPowerPoint_MultipleWorksheets() + + ' OVERVIEW: + ' This script will loop through all the worksheets in the Active Workbook + ' and copy all the Charts to a new PowerPoint presentation that we create. + ' Each chart will get their own individual slide and will be placed in the center of it. + + 'Declare PowerPoint Variables + Dim PPTApp As PowerPoint.Application + Dim PPTPres As PowerPoint.Presentation + Dim PPTSlide As PowerPoint.Slide + Dim PPTShape As PowerPoint.Shape + Dim SldIndex As Integer + + 'Declare Excel Variables + Dim Chrt As ChartObject + Dim WrkSht As Worksheet + + 'Create new PowerPoint Application & make it visible. + Set PPTApp = New PowerPoint.Application + PPTApp.Visible = True + + 'Create new presentation in the PowerPoint application. + Set PPTPres = PPTApp.Presentations.Add + + 'Create an index handler for slide creation. + SldIndex = 1 + + 'Loop throught all the Worksheets in the Worksheets Collection. + For Each WrkSht In Worksheets + + 'Loop through all the CHARTOBJECTS in the ACTIVESHEET. + For Each Chrt In WrkSht.ChartObjects + + 'Copy the Chart + Chrt.Copy + + 'Create a new slide in the Presentation, set the layout to blank, and paste chart on to the newly added slide. + Set PPTSlide = PPTPres.Slides.Add(SldIndex, ppLayoutBlank) + PPTSlide.Shapes.Paste + + 'Increment index so that way we paste the next chart on the new slide that is added. + SldIndex = SldIndex + 1 + + Next Chrt + + Next WrkSht + +End Sub + + +Sub ExportChartToPowerPoint_PasteMethods() + + ' OVERVIEW: + ' This script will create a new PowerPoint Presentation and copy the chart + ' we specify to the newly created PowerPoint Presentation. + + 'Declare PowerPoint Variables + Dim PPTApp As PowerPoint.Application + Dim PPTPres As PowerPoint.Presentation + Dim PPTSlide As PowerPoint.Slide + Dim PPTShape As PowerPoint.Shape + + 'Dim Excel Variables + Dim Chrt As ChartObject + + 'Create a new PowerPoint Application & make it visible. + Set PPTApp = New PowerPoint.Application + PPTApp.Visible = True + + 'Create a new presentation in the PowerPoint Application + Set PPTPres = PPTApp.Presentations.Add + + 'Create a new slide in the PowerPoint Presentation + Set PPTSlide = PPTPres.Slides.Add(1, ppLayoutBlank) + + 'Create a Chart Object variable where specify the sheet the chart is on and the index number of that chart. + Set Chrt = Worksheets("Charts_One").ChartObjects(1) + + 'Copy the Chart. + Chrt.Copy + + 'Copy the Chart Area, use when we want to paste as an OLEObject. + 'Chrt.Chart.ChartArea.Copy + + 'PASTE USING REGULAR PASTE METHOD + + 'Use Paste method to Paste as Chart Object in PowerPoint + 'PPTSlide.Shapes.Paste + + 'PASTE USING PASTESPECIAL METHOD + + 'Paste as Bitmap + 'PPTSlide.Shapes.PasteSpecial DataType:=ppPasteBitmap + + 'Paste as Default + 'PPTSlide.Shapes.PasteSpecial DataType:=ppPasteDefault + + 'Paste as EnhancedMetafile + 'PPTSlide.Shapes.PasteSpecial DataType:=ppPasteEnhancedMetafile + + 'Paste as HTML - DOES NOT WORK WITH CHARTS + 'PPTSlide.Shapes.PasteSpecial DataType:=ppPasteHTML + + 'Paste as GIF + 'PPTSlide.Shapes.PasteSpecial DataType:=ppPasteGIF + + 'Paste as JPG + 'PPTSlide.Shapes.PasteSpecial DataType:=ppPasteJPG + + 'Paste as MetafilePicture + 'PPTSlide.Shapes.PasteSpecial DataType:=ppPasteMetafilePicture + + 'Paste as PNG + 'PPTSlide.Shapes.PasteSpecial DataType:=ppPastePNG + + 'Paste as Shape + 'PPTSlide.Shapes.PasteSpecial DataType:=ppPasteShape + + 'Paste as Shape and it is linked. + 'PPTSlide.Shapes.PasteSpecial DataType:=ppPasteShape, Link:=msoTrue + + 'Paste as Shape, display it as an icon, change the icon label, and make it a linked icon. + 'PPTSlide.Shapes.PasteSpecial DataType:=ppPasteShape, DisplayAsIcon:=True, IconLabel:="Link to my Chart", Link:=msoTrue + + 'Paste as OLEObject and it is linked. + PPTSlide.Shapes.PasteSpecial DataType:=ppPasteOLEObject, Link:=msoTrue + +End Sub + + + diff --git a/vba/powerpoint-vba/Excel to PowerPoint Paste Methods.bas b/vba/vba-powerpoint/Excel to PowerPoint - Paste Methods.bas similarity index 100% rename from vba/powerpoint-vba/Excel to PowerPoint Paste Methods.bas rename to vba/vba-powerpoint/Excel to PowerPoint - Paste Methods.bas diff --git a/vba/powerpoint-vba/Excel Picture To PowerPoint.bas b/vba/vba-powerpoint/Excel to PowerPoint - Pictures.bas similarity index 96% rename from vba/powerpoint-vba/Excel Picture To PowerPoint.bas rename to vba/vba-powerpoint/Excel to PowerPoint - Pictures.bas index 397956b..0ed1c59 100644 --- a/vba/powerpoint-vba/Excel Picture To PowerPoint.bas +++ b/vba/vba-powerpoint/Excel to PowerPoint - Pictures.bas @@ -1,86 +1,86 @@ -Attribute VB_Name = "Module3" -Option Explicit - -Public Sub TestCopyPastePic() - -'Declare PowerPoint Variables -Dim PPTApp As PowerPoint.Application -Dim PPTSlide As PowerPoint.Slide -Dim PPTPres As PowerPoint.Presentation -Dim PPTShape As PowerPoint.Shape - -'Declare Excel Variables -Dim ExcShape As Excel.Shape -Dim WrkSht As Worksheet - - 'Check if PowerPoint is active - On Error Resume Next - Set PPTApp = GetObject(, "PowerPoint.Application") - On Error GoTo 0 - - 'Open PowerPoint if not active - If PPTApp Is Nothing Then - Set PPTApp = New PowerPoint.Application - End If - - 'Display the PowerPoint presentation - PPTApp.Visible = True - - 'Create new presentation in PowerPoint - If PPTApp.Presentations.Count = 0 Then - PPTApp.Presentations.Add - End If - - 'Create a reference to the Active Presentation - Set PPTPres = PPTApp.ActivePresentation - - 'Locate Excel charts to paste into the new PowerPoint presentation - For Each WrkSht In ActiveWorkbook.Worksheets - - 'If the Worksheet is visible then continue on. - If WrkSht.Visible Then - - For Each ExcShape In ActiveSheet.Shapes - - If ExcShape.Type = msoPicture Then - - 'Create a new slide - Set PPTSlide = PPTPres.Slides.Add(PPTPres.Slides.Count + 1, ppLayoutText) - - 'Go to the new slide - PPTApp.ActiveWindow.View.GotoSlide PPTPres.Slides.Count - - 'Copy the Shape - ExcShape.Copy - - 'Paste Shape in the slide. - PPTSlide.Shapes.PasteSpecial DataType:=ppPasteMetafilePicture - Set PPTShape = PPTSlide.Shapes(PPTSlide.Shapes.Count) - PPTShape.Select - - 'Set the dimensions of the shape. - With PPTApp.ActiveWindow.Selection.ShapeRange - .Left = 25 - .Top = 150 - .Width = 250 - .Left = 500 - End With - - End If - - Next ExcShape - - End If - - Next WrkSht - -'Activate the PowerPoint App -PPTApp.Activate - -'Memory clean up -Set PPTSlide = Nothing -Set PPTApp = Nothing -Set PPTShape = Nothing - -End Sub - +Attribute VB_Name = "Module3" +Option Explicit + +Public Sub TestCopyPastePic() + +'Declare PowerPoint Variables +Dim PPTApp As PowerPoint.Application +Dim PPTSlide As PowerPoint.Slide +Dim PPTPres As PowerPoint.Presentation +Dim PPTShape As PowerPoint.Shape + +'Declare Excel Variables +Dim ExcShape As Excel.Shape +Dim WrkSht As Worksheet + + 'Check if PowerPoint is active + On Error Resume Next + Set PPTApp = GetObject(, "PowerPoint.Application") + On Error GoTo 0 + + 'Open PowerPoint if not active + If PPTApp Is Nothing Then + Set PPTApp = New PowerPoint.Application + End If + + 'Display the PowerPoint presentation + PPTApp.Visible = True + + 'Create new presentation in PowerPoint + If PPTApp.Presentations.Count = 0 Then + PPTApp.Presentations.Add + End If + + 'Create a reference to the Active Presentation + Set PPTPres = PPTApp.ActivePresentation + + 'Locate Excel charts to paste into the new PowerPoint presentation + For Each WrkSht In ActiveWorkbook.Worksheets + + 'If the Worksheet is visible then continue on. + If WrkSht.Visible Then + + For Each ExcShape In ActiveSheet.Shapes + + If ExcShape.Type = msoPicture Then + + 'Create a new slide + Set PPTSlide = PPTPres.Slides.Add(PPTPres.Slides.Count + 1, ppLayoutText) + + 'Go to the new slide + PPTApp.ActiveWindow.View.GotoSlide PPTPres.Slides.Count + + 'Copy the Shape + ExcShape.Copy + + 'Paste Shape in the slide. + PPTSlide.Shapes.PasteSpecial DataType:=ppPasteMetafilePicture + Set PPTShape = PPTSlide.Shapes(PPTSlide.Shapes.Count) + PPTShape.Select + + 'Set the dimensions of the shape. + With PPTApp.ActiveWindow.Selection.ShapeRange + .Left = 25 + .Top = 150 + .Width = 250 + .Left = 500 + End With + + End If + + Next ExcShape + + End If + + Next WrkSht + +'Activate the PowerPoint App +PPTApp.Activate + +'Memory clean up +Set PPTSlide = Nothing +Set PPTApp = Nothing +Set PPTShape = Nothing + +End Sub + diff --git a/vba/powerpoint-vba/Excel Range To PowerPoint.bas b/vba/vba-powerpoint/Excel to PowerPoint - Ranges.bas similarity index 96% rename from vba/powerpoint-vba/Excel Range To PowerPoint.bas rename to vba/vba-powerpoint/Excel to PowerPoint - Ranges.bas index 0d2ff6b..ddcd3bf 100644 --- a/vba/powerpoint-vba/Excel Range To PowerPoint.bas +++ b/vba/vba-powerpoint/Excel to PowerPoint - Ranges.bas @@ -1,121 +1,121 @@ -Attribute VB_Name = "Module1" -Sub ExportRangeToPowerPoint() - - Dim PPTApp As PowerPoint.Application - Dim PPTPres As PowerPoint.Presentation - Dim PPTSlide As PowerPoint.Slide - - Dim ExcRng As Range - - 'Create a new instance of PowerPoint - Set PPTApp = New PowerPoint.Application - PPTApp.Visible = True - - 'Create a new Presentation - Set PPTPres = PPTApp.Presentations.Add - - 'Create a new Slide - Set PPTSlide = PPTPres.Slides.Add(1, ppLayoutBlank) - - 'Set a reference to the range - Set ExcRng = Range("A1:C5") - - 'Copy Range - ExcRng.Copy - - 'Paste the range in the slide - PPTSlide.Shapes.Paste - - 'Create another slide - Set PPTSlide = PPTPres.Slides.Add(2, ppLayoutBlank) - - PPTSlide.Shapes.PasteSpecial DataType:=ppPasteOLEObject, Link:=msoTrue - -End Sub - - -Sub ExportMultipleRangeToPowerPoint_Method1() - - 'Declare PowerPoint Variables - Dim PPTApp As PowerPoint.Application - Dim PPTPres As PowerPoint.Presentation - Dim PPTSlide As PowerPoint.Slide - - 'Declare Excel Variables - Dim ExcRng As Range - Dim RngArray As Variant - Dim ShtArray As Variant - - 'Populate our arrays - RngArray = Array("A1:C5", "A10:C14", "C2:E6", "B2:D6") - ShtArray = Array("One", "One", "Two", "Three") - - 'Create a new instance of PowerPoint - Set PPTApp = New PowerPoint.Application - PPTApp.Visible = True - - 'Create a new Presentation - Set PPTPres = PPTApp.Presentations.Add - - 'Loop through the range array, create a slide for each range, and copy that range on to the slide. - For x = LBound(RngArray) To UBound(RngArray) - - 'Set a reference to the range - Set ExcRng = Worksheets(ShtArray(x)).Range(RngArray(x)) - - 'Copy the range - ExcRng.Copy - - 'Create a new Slide - Set PPTSlide = PPTPres.Slides.Add(x + 1, ppLayoutBlank) - - 'Paste the range in the slide - PPTSlide.Shapes.Paste - - Next x - -End Sub - - -Sub ExportMultipleRangeToPowerPoint_Method2() - - 'Declare PowerPoint Variables - Dim PPTApp As PowerPoint.Application - Dim PPTPres As PowerPoint.Presentation - Dim PPTSlide As PowerPoint.Slide - - 'Declare Excel Variables - Dim ExcRng As Range - Dim RngArray As Variant - - 'Populate our array - RngArray = Array(Sheet1.Range("A1:C5"), Sheet1.Range("A10:C14"), Sheet2.Range("C2:E6"), Sheet3.Range("B2:D6")) - - 'Create a new instance of PowerPoint - Set PPTApp = New PowerPoint.Application - PPTApp.Visible = True - - 'Create a new Presentation - Set PPTPres = PPTApp.Presentations.Add - - 'Loop through the range array, create a slide for each range, and copy that range on to the slide. - For x = LBound(RngArray) To UBound(RngArray) - - 'Set a reference to the range - Set ExcRng = RngArray(x) - - 'Copy Range - ExcRng.Copy - - 'Enable this line of code if you recieve error about the range not being in the clipboard - This will fix that error by pausing the program for ONE Second. - 'Application.Wait Now + #12:00:01 AM# - - 'Create a new Slide - Set PPTSlide = PPTPres.Slides.Add(x + 1, ppLayoutBlank) - - 'Paste the range in the slide as a linked OLEObject - PPTSlide.Shapes.PasteSpecial DataType:=ppPasteOLEObject, Link:=msoTrue - - Next x - -End Sub +Attribute VB_Name = "Module1" +Sub ExportRangeToPowerPoint() + + Dim PPTApp As PowerPoint.Application + Dim PPTPres As PowerPoint.Presentation + Dim PPTSlide As PowerPoint.Slide + + Dim ExcRng As Range + + 'Create a new instance of PowerPoint + Set PPTApp = New PowerPoint.Application + PPTApp.Visible = True + + 'Create a new Presentation + Set PPTPres = PPTApp.Presentations.Add + + 'Create a new Slide + Set PPTSlide = PPTPres.Slides.Add(1, ppLayoutBlank) + + 'Set a reference to the range + Set ExcRng = Range("A1:C5") + + 'Copy Range + ExcRng.Copy + + 'Paste the range in the slide + PPTSlide.Shapes.Paste + + 'Create another slide + Set PPTSlide = PPTPres.Slides.Add(2, ppLayoutBlank) + + PPTSlide.Shapes.PasteSpecial DataType:=ppPasteOLEObject, Link:=msoTrue + +End Sub + + +Sub ExportMultipleRangeToPowerPoint_Method1() + + 'Declare PowerPoint Variables + Dim PPTApp As PowerPoint.Application + Dim PPTPres As PowerPoint.Presentation + Dim PPTSlide As PowerPoint.Slide + + 'Declare Excel Variables + Dim ExcRng As Range + Dim RngArray As Variant + Dim ShtArray As Variant + + 'Populate our arrays + RngArray = Array("A1:C5", "A10:C14", "C2:E6", "B2:D6") + ShtArray = Array("One", "One", "Two", "Three") + + 'Create a new instance of PowerPoint + Set PPTApp = New PowerPoint.Application + PPTApp.Visible = True + + 'Create a new Presentation + Set PPTPres = PPTApp.Presentations.Add + + 'Loop through the range array, create a slide for each range, and copy that range on to the slide. + For x = LBound(RngArray) To UBound(RngArray) + + 'Set a reference to the range + Set ExcRng = Worksheets(ShtArray(x)).Range(RngArray(x)) + + 'Copy the range + ExcRng.Copy + + 'Create a new Slide + Set PPTSlide = PPTPres.Slides.Add(x + 1, ppLayoutBlank) + + 'Paste the range in the slide + PPTSlide.Shapes.Paste + + Next x + +End Sub + + +Sub ExportMultipleRangeToPowerPoint_Method2() + + 'Declare PowerPoint Variables + Dim PPTApp As PowerPoint.Application + Dim PPTPres As PowerPoint.Presentation + Dim PPTSlide As PowerPoint.Slide + + 'Declare Excel Variables + Dim ExcRng As Range + Dim RngArray As Variant + + 'Populate our array + RngArray = Array(Sheet1.Range("A1:C5"), Sheet1.Range("A10:C14"), Sheet2.Range("C2:E6"), Sheet3.Range("B2:D6")) + + 'Create a new instance of PowerPoint + Set PPTApp = New PowerPoint.Application + PPTApp.Visible = True + + 'Create a new Presentation + Set PPTPres = PPTApp.Presentations.Add + + 'Loop through the range array, create a slide for each range, and copy that range on to the slide. + For x = LBound(RngArray) To UBound(RngArray) + + 'Set a reference to the range + Set ExcRng = RngArray(x) + + 'Copy Range + ExcRng.Copy + + 'Enable this line of code if you recieve error about the range not being in the clipboard - This will fix that error by pausing the program for ONE Second. + 'Application.Wait Now + #12:00:01 AM# + + 'Create a new Slide + Set PPTSlide = PPTPres.Slides.Add(x + 1, ppLayoutBlank) + + 'Paste the range in the slide as a linked OLEObject + PPTSlide.Shapes.PasteSpecial DataType:=ppPasteOLEObject, Link:=msoTrue + + Next x + +End Sub diff --git a/vba/powerpoint-vba/Excel Shape Manipulation In PowerPoint.bas b/vba/vba-powerpoint/Excel to PowerPoint - Shape Manipulation.bas similarity index 96% rename from vba/powerpoint-vba/Excel Shape Manipulation In PowerPoint.bas rename to vba/vba-powerpoint/Excel to PowerPoint - Shape Manipulation.bas index 43eacda..6a8fb35 100644 --- a/vba/powerpoint-vba/Excel Shape Manipulation In PowerPoint.bas +++ b/vba/vba-powerpoint/Excel to PowerPoint - Shape Manipulation.bas @@ -1,210 +1,210 @@ -Attribute VB_Name = "Module1" -Sub ManipulateShapeInPowerPoint() - - 'Declare PowerPoint Variables - Dim PPTApp As PowerPoint.Application - Dim PPTPres As PowerPoint.Presentation - Dim PPTSlide As PowerPoint.Slide - Dim PPTShape As PowerPoint.Shape - - 'Dim Excel Variables - Dim Chrt As ChartObject - - 'Create a new PowerPoint Application & make it visible. - Set PPTApp = New PowerPoint.Application - PPTApp.Visible = True - PPTApp.Activate - - 'Create a new presentation in the PowerPoint Application - Set PPTPres = PPTApp.Presentations.Add - - 'Create a new slide in the PowerPoint Presentation - Set PPTSlide = PPTPres.Slides.Add(1, ppLayoutTitleOnly) - - 'Create a Chart Object variable where specify the sheet the chart is on and the index number of that chart. - Set Chrt = Worksheets("Object").ChartObjects(1) - - 'Copy the Chart Object variable we specified above. - Chrt.Copy - - 'Paste the Chart Object on the Slide that we created above. - PPTSlide.Shapes.Paste - - 'Set a reference to the shape we want to manipulate - Set PPTShape = PPTSlide.Shapes(2) - 'Set PPTShape = PPTSlide.Shapes(PPTSlide.Shapes.Count) - - 'Set the height, width, top & left of the shape - With PPTShape - .Left = 100 - .Top = 100 - .Height = 300 - .Width = 300 - End With - -End Sub - - -Sub AligningShapesInPowerPointAlign_MethodOne() - - 'Declare PowerPoint Variables - Dim PPTApp As PowerPoint.Application - Dim PPTPres As PowerPoint.Presentation - Dim PPTSlide As PowerPoint.Slide - Dim PPTShape As PowerPoint.Shape - - 'Dim Excel Variables - Dim Chrt As ChartObject - - 'Create a new PowerPoint Application & make it visible. - Set PPTApp = New PowerPoint.Application - PPTApp.Visible = True - PPTApp.Activate - - 'Create a new presentation in the PowerPoint Application - Set PPTPres = PPTApp.Presentations.Add - - 'Create a new slide in the PowerPoint Presentation - Set PPTSlide = PPTPres.Slides.Add(1, ppLayoutTitleOnly) - - 'Create a Chart Object variable where specify the sheet the chart is on and the index number of that chart. - Set Chrt = Worksheets("Object").ChartObjects(1) - - 'Copy the Chart Object variable we specified above. - Chrt.Copy - - 'Paste the Chart Object on the Slide that we created above. - PPTSlide.Shapes.Paste - - 'Set a reference to the shape we want to manipulate - Set PPTShape = PPTSlide.Shapes(PPTSlide.Shapes.Count) - - 'Set the height & width of the shape - With PPTShape - .Height = 300 - .Width = 300 - End With - - 'Get the Slide Width & Slide Height - SldHeight = PPTPres.PageSetup.SlideHeight - SldWidth = PPTPres.PageSetup.SlideWidth - - 'Calculate the Slide Center and Slide Middle - SldMiddle = (SldHeight / 2) - SldCenter = (SldWidth / 2) - - 'Calculate Shape Center and Shape Middle - ShpMiddle = (PPTShape.Height / 2) - ShpCenter = (PPTShape.Width / 2) - - 'Center the shape and align it to the middle - With PPTShape - .Left = SldCenter - ShpCenter - .Top = SldMiddle - ShpMiddle - End With - - -End Sub - - - -Sub AligningShapesInPowerPointAlign_MethodTwo() - - 'Declare PowerPoint Variables - Dim PPTApp As PowerPoint.Application - Dim PPTPres As PowerPoint.Presentation - Dim PPTSlide As PowerPoint.Slide - Dim PPTShape As PowerPoint.Shape - Dim PPTShapeRng As PowerPoint.ShapeRange - Dim ShpCount As Integer - - 'Dim Excel Variables - Dim Chrt As ChartObject - - 'Create a new PowerPoint Application & make it visible. - Set PPTApp = New PowerPoint.Application - PPTApp.Visible = True - PPTApp.Activate - - 'Create a new presentation in the PowerPoint Application - Set PPTPres = PPTApp.Presentations.Add - - 'Create a new slide in the PowerPoint Presentation - Set PPTSlide = PPTPres.Slides.Add(1, ppLayoutTitleOnly) - - 'Create a Chart Object variable where specify the sheet the chart is on and the index number of that chart. - Set Chrt = Worksheets("Object").ChartObjects(1) - - 'Copy the Chart Object variable we specified above. - Chrt.Copy - - 'Paste the Chart Object on the Slide that we created above. - PPTSlide.Shapes.Paste - - 'Count Shapes on Slide - ShpCount = PPTSlide.Shapes.Count - - 'Create a reference to a shape range that will contain multiple shapes. - Set PPTShapeRng = PPTSlide.Shapes.Range(Array(ShpCount)) - - 'Set the height & width of the shape. - With PPTShapeRng - .Height = 300 - .Width = 300 - End With - - 'Align Shape to the middle & center of the SLIDE - PPTShapeRng.Align msoAlignCenters, True - PPTShapeRng.Align msoAlignMiddles, True - -End Sub - - -Sub AligningShapesInPowerPointAlign_MethodThree() - - 'Declare PowerPoint Variables - Dim PPTApp As PowerPoint.Application - Dim PPTPres As PowerPoint.Presentation - Dim PPTSlide As PowerPoint.Slide - - 'Dim Excel Variables - Dim Chrt As ChartObject - - 'Create a new PowerPoint Application & make it visible. - Set PPTApp = New PowerPoint.Application - PPTApp.Visible = True - PPTApp.Activate - - 'Create a new presentation in the PowerPoint Application - Set PPTPres = PPTApp.Presentations.Add - - 'Create a new slide in the PowerPoint Presentation - Set PPTSlide = PPTPres.Slides.Add(1, ppLayoutTitleOnly) - - 'Create a Chart Object variable where specify the sheet the chart is on and the index number of that chart. - Set Chrt = Worksheets("Object").ChartObjects(1) - - 'Copy the Chart Object variable we specified above. - Chrt.Copy - - 'Paste the Chart Object on the Slide that we created above & select that shape - PPTSlide.Shapes.Paste.Select - - 'Set dimensions of the shape - With PPTApp.ActiveWindow.Selection.ShapeRange - - .Height = 300 - .Width = 300 - .Align msoAlignMiddles, True - .Align msoAlignCenters, True - - End With - - -End Sub - - - - - - +Attribute VB_Name = "Module1" +Sub ManipulateShapeInPowerPoint() + + 'Declare PowerPoint Variables + Dim PPTApp As PowerPoint.Application + Dim PPTPres As PowerPoint.Presentation + Dim PPTSlide As PowerPoint.Slide + Dim PPTShape As PowerPoint.Shape + + 'Dim Excel Variables + Dim Chrt As ChartObject + + 'Create a new PowerPoint Application & make it visible. + Set PPTApp = New PowerPoint.Application + PPTApp.Visible = True + PPTApp.Activate + + 'Create a new presentation in the PowerPoint Application + Set PPTPres = PPTApp.Presentations.Add + + 'Create a new slide in the PowerPoint Presentation + Set PPTSlide = PPTPres.Slides.Add(1, ppLayoutTitleOnly) + + 'Create a Chart Object variable where specify the sheet the chart is on and the index number of that chart. + Set Chrt = Worksheets("Object").ChartObjects(1) + + 'Copy the Chart Object variable we specified above. + Chrt.Copy + + 'Paste the Chart Object on the Slide that we created above. + PPTSlide.Shapes.Paste + + 'Set a reference to the shape we want to manipulate + Set PPTShape = PPTSlide.Shapes(2) + 'Set PPTShape = PPTSlide.Shapes(PPTSlide.Shapes.Count) + + 'Set the height, width, top & left of the shape + With PPTShape + .Left = 100 + .Top = 100 + .Height = 300 + .Width = 300 + End With + +End Sub + + +Sub AligningShapesInPowerPointAlign_MethodOne() + + 'Declare PowerPoint Variables + Dim PPTApp As PowerPoint.Application + Dim PPTPres As PowerPoint.Presentation + Dim PPTSlide As PowerPoint.Slide + Dim PPTShape As PowerPoint.Shape + + 'Dim Excel Variables + Dim Chrt As ChartObject + + 'Create a new PowerPoint Application & make it visible. + Set PPTApp = New PowerPoint.Application + PPTApp.Visible = True + PPTApp.Activate + + 'Create a new presentation in the PowerPoint Application + Set PPTPres = PPTApp.Presentations.Add + + 'Create a new slide in the PowerPoint Presentation + Set PPTSlide = PPTPres.Slides.Add(1, ppLayoutTitleOnly) + + 'Create a Chart Object variable where specify the sheet the chart is on and the index number of that chart. + Set Chrt = Worksheets("Object").ChartObjects(1) + + 'Copy the Chart Object variable we specified above. + Chrt.Copy + + 'Paste the Chart Object on the Slide that we created above. + PPTSlide.Shapes.Paste + + 'Set a reference to the shape we want to manipulate + Set PPTShape = PPTSlide.Shapes(PPTSlide.Shapes.Count) + + 'Set the height & width of the shape + With PPTShape + .Height = 300 + .Width = 300 + End With + + 'Get the Slide Width & Slide Height + SldHeight = PPTPres.PageSetup.SlideHeight + SldWidth = PPTPres.PageSetup.SlideWidth + + 'Calculate the Slide Center and Slide Middle + SldMiddle = (SldHeight / 2) + SldCenter = (SldWidth / 2) + + 'Calculate Shape Center and Shape Middle + ShpMiddle = (PPTShape.Height / 2) + ShpCenter = (PPTShape.Width / 2) + + 'Center the shape and align it to the middle + With PPTShape + .Left = SldCenter - ShpCenter + .Top = SldMiddle - ShpMiddle + End With + + +End Sub + + + +Sub AligningShapesInPowerPointAlign_MethodTwo() + + 'Declare PowerPoint Variables + Dim PPTApp As PowerPoint.Application + Dim PPTPres As PowerPoint.Presentation + Dim PPTSlide As PowerPoint.Slide + Dim PPTShape As PowerPoint.Shape + Dim PPTShapeRng As PowerPoint.ShapeRange + Dim ShpCount As Integer + + 'Dim Excel Variables + Dim Chrt As ChartObject + + 'Create a new PowerPoint Application & make it visible. + Set PPTApp = New PowerPoint.Application + PPTApp.Visible = True + PPTApp.Activate + + 'Create a new presentation in the PowerPoint Application + Set PPTPres = PPTApp.Presentations.Add + + 'Create a new slide in the PowerPoint Presentation + Set PPTSlide = PPTPres.Slides.Add(1, ppLayoutTitleOnly) + + 'Create a Chart Object variable where specify the sheet the chart is on and the index number of that chart. + Set Chrt = Worksheets("Object").ChartObjects(1) + + 'Copy the Chart Object variable we specified above. + Chrt.Copy + + 'Paste the Chart Object on the Slide that we created above. + PPTSlide.Shapes.Paste + + 'Count Shapes on Slide + ShpCount = PPTSlide.Shapes.Count + + 'Create a reference to a shape range that will contain multiple shapes. + Set PPTShapeRng = PPTSlide.Shapes.Range(Array(ShpCount)) + + 'Set the height & width of the shape. + With PPTShapeRng + .Height = 300 + .Width = 300 + End With + + 'Align Shape to the middle & center of the SLIDE + PPTShapeRng.Align msoAlignCenters, True + PPTShapeRng.Align msoAlignMiddles, True + +End Sub + + +Sub AligningShapesInPowerPointAlign_MethodThree() + + 'Declare PowerPoint Variables + Dim PPTApp As PowerPoint.Application + Dim PPTPres As PowerPoint.Presentation + Dim PPTSlide As PowerPoint.Slide + + 'Dim Excel Variables + Dim Chrt As ChartObject + + 'Create a new PowerPoint Application & make it visible. + Set PPTApp = New PowerPoint.Application + PPTApp.Visible = True + PPTApp.Activate + + 'Create a new presentation in the PowerPoint Application + Set PPTPres = PPTApp.Presentations.Add + + 'Create a new slide in the PowerPoint Presentation + Set PPTSlide = PPTPres.Slides.Add(1, ppLayoutTitleOnly) + + 'Create a Chart Object variable where specify the sheet the chart is on and the index number of that chart. + Set Chrt = Worksheets("Object").ChartObjects(1) + + 'Copy the Chart Object variable we specified above. + Chrt.Copy + + 'Paste the Chart Object on the Slide that we created above & select that shape + PPTSlide.Shapes.Paste.Select + + 'Set dimensions of the shape + With PPTApp.ActiveWindow.Selection.ShapeRange + + .Height = 300 + .Width = 300 + .Align msoAlignMiddles, True + .Align msoAlignCenters, True + + End With + + +End Sub + + + + + + diff --git a/vba/powerpoint-vba/Multiple Excel Objects To PowerPoint.bas b/vba/vba-powerpoint/Excel to PowerPoint - Specific Slide Multiple Objects.bas similarity index 96% rename from vba/powerpoint-vba/Multiple Excel Objects To PowerPoint.bas rename to vba/vba-powerpoint/Excel to PowerPoint - Specific Slide Multiple Objects.bas index 53ac21e..d41b524 100644 --- a/vba/powerpoint-vba/Multiple Excel Objects To PowerPoint.bas +++ b/vba/vba-powerpoint/Excel to PowerPoint - Specific Slide Multiple Objects.bas @@ -1,87 +1,87 @@ -Attribute VB_Name = "Module2" -Option Explicit - -Sub CopyMultiObjectsToPPT() - - 'Declare PowerPoint Variables - Dim PPTApp As PowerPoint.Application - Dim PPTPres As PowerPoint.Presentation - Dim PPTSlide As PowerPoint.Slide - Dim PPTShape As PowerPoint.Shape - - 'Declare Excel Variables - Dim ExcObj, ObjType, ObjArray As Variant - Dim LefArray, TopArray, HgtArray, WidArray As Variant - Dim x As Integer - - 'Create a new instance of PowerPoint - Set PPTApp = New PowerPoint.Application - PPTApp.Visible = True - PPTApp.Activate - - 'Create a new presentation - Set PPTPres = PPTApp.Presentations.Add - - 'Create a new slide in the presentation - Set PPTSlide = PPTPres.Slides.Add(1, ppLayoutBlank) - - 'Create array to house objects we want to export - ObjArray = Array(Sheet2.Range("B2:D5"), Sheet2.ChartObjects(1), Sheet2.ListObjects(1)) - - 'Define my dimension arrays - LefArray = Array(59.3, 59.3, 451.5) - TopArray = Array(270, 34.44, 34.44) - HgtArray = Array(105.27, 215.25, 131.64) - WidArray = Array(359.23, 359.25, 449.22) - - 'Loop through the object array and copy each object - For x = LBound(ObjArray) To UBound(ObjArray) - - 'Determine Object Type - ObjType = TypeName(ObjArray(x)) - - 'Depending on the object type, copy it a certain way - Select Case ObjType - - Case "Range" - Set ExcObj = ObjArray(x) - ExcObj.Copy - - Case "ChartObject" - Set ExcObj = ObjArray(x) - ExcObj.Chart.ChartArea.Copy - - Case "ListObject" - Set ExcObj = ObjArray(x) - ExcObj.Range.Copy - - End Select - - 'Pause the Excel Application - Application.Wait Now() + #12:00:01 AM# - - 'Paste the object in the slide - PPTSlide.Shapes.PasteSpecial DataType:=ppPasteOLEObject - - 'Set a reference to the shape - Set PPTShape = PPTSlide.Shapes(PPTSlide.Shapes.Count) - - 'Set the dimension of my shape - With PPTShape - .Left = LefArray(x) - .Height = HgtArray(x) - .Width = WidArray(x) - .Top = TopArray(x) - End With - - Next - -End Sub - - - - - - - - +Attribute VB_Name = "Module2" +Option Explicit + +Sub CopyMultiObjectsToPPT() + + 'Declare PowerPoint Variables + Dim PPTApp As PowerPoint.Application + Dim PPTPres As PowerPoint.Presentation + Dim PPTSlide As PowerPoint.Slide + Dim PPTShape As PowerPoint.Shape + + 'Declare Excel Variables + Dim ExcObj, ObjType, ObjArray As Variant + Dim LefArray, TopArray, HgtArray, WidArray As Variant + Dim x As Integer + + 'Create a new instance of PowerPoint + Set PPTApp = New PowerPoint.Application + PPTApp.Visible = True + PPTApp.Activate + + 'Create a new presentation + Set PPTPres = PPTApp.Presentations.Add + + 'Create a new slide in the presentation + Set PPTSlide = PPTPres.Slides.Add(1, ppLayoutBlank) + + 'Create array to house objects we want to export + ObjArray = Array(Sheet2.Range("B2:D5"), Sheet2.ChartObjects(1), Sheet2.ListObjects(1)) + + 'Define my dimension arrays + LefArray = Array(59.3, 59.3, 451.5) + TopArray = Array(270, 34.44, 34.44) + HgtArray = Array(105.27, 215.25, 131.64) + WidArray = Array(359.23, 359.25, 449.22) + + 'Loop through the object array and copy each object + For x = LBound(ObjArray) To UBound(ObjArray) + + 'Determine Object Type + ObjType = TypeName(ObjArray(x)) + + 'Depending on the object type, copy it a certain way + Select Case ObjType + + Case "Range" + Set ExcObj = ObjArray(x) + ExcObj.Copy + + Case "ChartObject" + Set ExcObj = ObjArray(x) + ExcObj.Chart.ChartArea.Copy + + Case "ListObject" + Set ExcObj = ObjArray(x) + ExcObj.Range.Copy + + End Select + + 'Pause the Excel Application + Application.Wait Now() + #12:00:01 AM# + + 'Paste the object in the slide + PPTSlide.Shapes.PasteSpecial DataType:=ppPasteOLEObject + + 'Set a reference to the shape + Set PPTShape = PPTSlide.Shapes(PPTSlide.Shapes.Count) + + 'Set the dimension of my shape + With PPTShape + .Left = LefArray(x) + .Height = HgtArray(x) + .Width = WidArray(x) + .Top = TopArray(x) + End With + + Next + +End Sub + + + + + + + + diff --git a/vba/powerpoint-vba/Export Excel Objects To Specific Slide.bas b/vba/vba-powerpoint/Excel to PowerPoint - Specific Slide.bas similarity index 100% rename from vba/powerpoint-vba/Export Excel Objects To Specific Slide.bas rename to vba/vba-powerpoint/Excel to PowerPoint - Specific Slide.bas diff --git a/vba/powerpoint-vba/Excel Table to PowerPoint.bas b/vba/vba-powerpoint/Excel to PowerPoint - Tables.bas similarity index 100% rename from vba/powerpoint-vba/Excel Table to PowerPoint.bas rename to vba/vba-powerpoint/Excel to PowerPoint - Tables.bas diff --git a/vba/powerpoint-vba/ShapeFinder.bas b/vba/vba-powerpoint/PowerPoint - Copy and Paste Shape Size.bas similarity index 100% rename from vba/powerpoint-vba/ShapeFinder.bas rename to vba/vba-powerpoint/PowerPoint - Copy and Paste Shape Size.bas diff --git a/vba/powerpoint-vba/Working With Slides.bas b/vba/vba-powerpoint/PowerPoint - Slide Object.bas similarity index 100% rename from vba/powerpoint-vba/Working With Slides.bas rename to vba/vba-powerpoint/PowerPoint - Slide Object.bas diff --git a/vba/powerpoint-vba/Working With Text Frames And Text Ranges.bas b/vba/vba-powerpoint/PowerPoint - TextFrame and TextRange Object.bas similarity index 100% rename from vba/powerpoint-vba/Working With Text Frames And Text Ranges.bas rename to vba/vba-powerpoint/PowerPoint - TextFrame and TextRange Object.bas diff --git a/vba/powerpoint-vba/UpdateLinks.bas b/vba/vba-powerpoint/PowerPoint - Update Links.bas similarity index 100% rename from vba/powerpoint-vba/UpdateLinks.bas rename to vba/vba-powerpoint/PowerPoint - Update Links.bas diff --git a/vba/word-vba/Excel Chart To Word.bas b/vba/vba-word/Excel To Word - Chart.bas similarity index 96% rename from vba/word-vba/Excel Chart To Word.bas rename to vba/vba-word/Excel To Word - Chart.bas index 34fcdc7..7840f78 100644 --- a/vba/word-vba/Excel Chart To Word.bas +++ b/vba/vba-word/Excel To Word - Chart.bas @@ -1,167 +1,167 @@ -Attribute VB_Name = "Module1" -Option Explicit - -Sub ExportChartToWord() - - 'Declare Word Object Variables - Dim WrdApp As Word.Application - Dim WrdDoc As Word.Document - - 'Declare Excel Object Variables - Dim Chrt As ChartObject - - 'Create a New Instance Of Word - Set WrdApp = New Word.Application - WrdApp.Visible = True - WrdApp.Activate - - 'Create a new Word Document - Set WrdDoc = WrdApp.Documents.Add - - 'Create a Reference to the chart I want to Export - Set Chrt = ActiveSheet.ChartObjects(1) - Chrt.Chart.ChartArea.Copy - - 'Paste into Word Document - With WrdApp.Selection - .PasteSpecial Link:=True, DataType:=wdPasteOLEObject - End With - -End Sub - -Sub ExportingToWord_MultipleCharts_Worksheet() - - 'Declare Word Variables - Dim WrdApp As Word.Application - Dim WrdDoc As Word.Document - Dim SecCnt As Integer - - 'Declare Excel Variables - Dim ChrtObj As ChartObject - Dim Rng As Range - - 'Create a new instance of Word - Set WrdApp = New Word.Application - WrdApp.Visible = True - WrdApp.Activate - - 'Create a new word document - Set WrdDoc = WrdApp.Documents.Add - - 'Loop through the charts on the active sheet - For Each ChrtObj In ActiveSheet.ChartObjects - - 'Copy the chart - ChrtObj.Chart.ChartArea.Copy - - 'Paste the Chart in the Word Document - With WrdApp.Selection - .PasteSpecial Link:=True, DataType:=wdPasteOLEObject, Placement:=wdInLine - End With - - 'Count the pages in the Word Document - SecCnt = WrdApp.ActiveDocument.Sections.Count - - 'Add a new page to the document. - WrdApp.ActiveDocument.Sections.Add - - 'Go to the newly created page. - WrdApp.Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext - - Next ChrtObj - -End Sub - - -Sub ExportingToWord_MultipleCharts_Workbook() - - 'Declare Word Variables - Dim WrdApp As Word.Application - Dim WrdDoc As Word.Document - Dim SecCnt As Integer - - 'Declare Excel Variables - Dim ChrtObj As ChartObject - Dim WrkSht As Worksheet - Dim Rng As Range - Dim ChrCnt As Integer - - 'Create a new instance of Word - Set WrdApp = New Word.Application - WrdApp.Visible = True - WrdApp.Activate - - 'Create a new word document - Set WrdDoc = WrdApp.Documents.Add - - ChrCnt = 0 - - 'Loop through all the worksheets in the Workbook that contains this code. - For Each WrkSht In ThisWorkbook.Worksheets - - 'Fix the instability error - WrkSht.Activate - - 'Loop through the charts on the active sheet - For Each ChrtObj In WrkSht.ChartObjects - - 'Copy the chart - ChrtObj.Chart.ChartArea.Copy - - 'Increment Chart Count - ChrCnt = ChrCnt + 1 - - 'Fix the instability error - Application.Wait Now + #12:00:01 AM# - - 'Paste the Chart in the Word Document - With WrdApp.Selection - .PasteSpecial Link:=True, DataType:=wdPasteOLEObject, Placement:=wdInLine - End With - - 'Count the pages in the Word Document - SecCnt = WrdApp.ActiveDocument.Sections.Count - - 'Add a new page to the document. - WrdApp.ActiveDocument.Sections.Add - - 'Go to the newly created page. - WrdApp.Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext - - 'Fix instability Errors - Application.CutCopyMode = False - - Next ChrtObj - - Next WrkSht - -End Sub - -Sub ExportChartToWord2() - - 'Declare Word Object Variables - Dim WrdApp As Object - Dim WrdDoc As Object - - 'Declare Excel Object Variables - Dim Chrt As ChartObject - - 'Create a New Instance Of Word - Set WrdApp = CreateObject("Word.Application") - WrdApp.Visible = True - WrdApp.Activate - - 'Create a new Word Document - Set WrdDoc = WrdApp.Documents.Add - - 'Create a Reference to the chart I want to Export - Set Chrt = ActiveSheet.ChartObjects(1) - Chrt.Chart.ChartArea.Copy - - 'Paste into Word Document - With WrdApp.Selection - .PasteSpecial Link:=True, DataType:=wdPasteOLEObject - End With - -End Sub - +Attribute VB_Name = "Module1" +Option Explicit + +Sub ExportChartToWord() + + 'Declare Word Object Variables + Dim WrdApp As Word.Application + Dim WrdDoc As Word.Document + + 'Declare Excel Object Variables + Dim Chrt As ChartObject + + 'Create a New Instance Of Word + Set WrdApp = New Word.Application + WrdApp.Visible = True + WrdApp.Activate + + 'Create a new Word Document + Set WrdDoc = WrdApp.Documents.Add + + 'Create a Reference to the chart I want to Export + Set Chrt = ActiveSheet.ChartObjects(1) + Chrt.Chart.ChartArea.Copy + + 'Paste into Word Document + With WrdApp.Selection + .PasteSpecial Link:=True, DataType:=wdPasteOLEObject + End With + +End Sub + +Sub ExportingToWord_MultipleCharts_Worksheet() + + 'Declare Word Variables + Dim WrdApp As Word.Application + Dim WrdDoc As Word.Document + Dim SecCnt As Integer + + 'Declare Excel Variables + Dim ChrtObj As ChartObject + Dim Rng As Range + + 'Create a new instance of Word + Set WrdApp = New Word.Application + WrdApp.Visible = True + WrdApp.Activate + + 'Create a new word document + Set WrdDoc = WrdApp.Documents.Add + + 'Loop through the charts on the active sheet + For Each ChrtObj In ActiveSheet.ChartObjects + + 'Copy the chart + ChrtObj.Chart.ChartArea.Copy + + 'Paste the Chart in the Word Document + With WrdApp.Selection + .PasteSpecial Link:=True, DataType:=wdPasteOLEObject, Placement:=wdInLine + End With + + 'Count the pages in the Word Document + SecCnt = WrdApp.ActiveDocument.Sections.Count + + 'Add a new page to the document. + WrdApp.ActiveDocument.Sections.Add + + 'Go to the newly created page. + WrdApp.Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext + + Next ChrtObj + +End Sub + + +Sub ExportingToWord_MultipleCharts_Workbook() + + 'Declare Word Variables + Dim WrdApp As Word.Application + Dim WrdDoc As Word.Document + Dim SecCnt As Integer + + 'Declare Excel Variables + Dim ChrtObj As ChartObject + Dim WrkSht As Worksheet + Dim Rng As Range + Dim ChrCnt As Integer + + 'Create a new instance of Word + Set WrdApp = New Word.Application + WrdApp.Visible = True + WrdApp.Activate + + 'Create a new word document + Set WrdDoc = WrdApp.Documents.Add + + ChrCnt = 0 + + 'Loop through all the worksheets in the Workbook that contains this code. + For Each WrkSht In ThisWorkbook.Worksheets + + 'Fix the instability error + WrkSht.Activate + + 'Loop through the charts on the active sheet + For Each ChrtObj In WrkSht.ChartObjects + + 'Copy the chart + ChrtObj.Chart.ChartArea.Copy + + 'Increment Chart Count + ChrCnt = ChrCnt + 1 + + 'Fix the instability error + Application.Wait Now + #12:00:01 AM# + + 'Paste the Chart in the Word Document + With WrdApp.Selection + .PasteSpecial Link:=True, DataType:=wdPasteOLEObject, Placement:=wdInLine + End With + + 'Count the pages in the Word Document + SecCnt = WrdApp.ActiveDocument.Sections.Count + + 'Add a new page to the document. + WrdApp.ActiveDocument.Sections.Add + + 'Go to the newly created page. + WrdApp.Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext + + 'Fix instability Errors + Application.CutCopyMode = False + + Next ChrtObj + + Next WrkSht + +End Sub + +Sub ExportChartToWord2() + + 'Declare Word Object Variables + Dim WrdApp As Object + Dim WrdDoc As Object + + 'Declare Excel Object Variables + Dim Chrt As ChartObject + + 'Create a New Instance Of Word + Set WrdApp = CreateObject("Word.Application") + WrdApp.Visible = True + WrdApp.Activate + + 'Create a new Word Document + Set WrdDoc = WrdApp.Documents.Add + + 'Create a Reference to the chart I want to Export + Set Chrt = ActiveSheet.ChartObjects(1) + Chrt.Chart.ChartArea.Copy + + 'Paste into Word Document + With WrdApp.Selection + .PasteSpecial Link:=True, DataType:=wdPasteOLEObject + End With + +End Sub + diff --git a/vba/word-vba/Excel Range To Word.bas b/vba/vba-word/Excel To Word - Range.bas similarity index 96% rename from vba/word-vba/Excel Range To Word.bas rename to vba/vba-word/Excel To Word - Range.bas index 26d345e..ebf5ed1 100644 --- a/vba/word-vba/Excel Range To Word.bas +++ b/vba/vba-word/Excel To Word - Range.bas @@ -1,91 +1,91 @@ -Attribute VB_Name = "Practice" -Option Explicit - -Sub RangeToWord_Single() - - 'Declare Word Object Variables - Dim WrdApp As Word.Application - Dim WrdDoc As Word.Document - - 'Declare Excel Object Variable - Dim ExcRng As Range - - 'Create a new instance of Word - Set WrdApp = New Word.Application - WrdApp.Visible = True - WrdApp.Activate - - 'Create a new word document - Set WrdDoc = WrdApp.Documents.Add - - 'Set the Range - Set ExcRng = ActiveSheet.Range("B2:E6") - - 'Copy the range - ExcRng.Copy - - 'Pause the application for two seconds - Application.Wait Now + #12:00:02 AM# - - 'Paste the chart in the Word Document - WrdDoc.Paragraphs(1).Range.PasteExcelTable LinkedToExcel:=True, WordFormatting:=False, RTF:=False - - 'Clear Clipboard - Application.CutCopyMode = False - -End Sub - -Sub RangeToWord_Multi() - - 'Declare Word Object Variables - Dim WrdApp As Word.Application - Dim WrdDoc As Word.Document - - 'Declare Excel Object Variable - Dim Rng As Variant - Dim ExcRng As Range - Dim RngArray As Variant - - 'Create a new instance of Word - Set WrdApp = New Word.Application - WrdApp.Visible = True - WrdApp.Activate - - 'Array that houses all of our ranges that we want to export - RngArray = Array(Worksheets("Sheet1").Range("B2:E6"), Worksheets("Sheet1").Range("B7:E10"), Worksheets("Sheet2").Range("B2:E5")) - - 'Create a new word document - Set WrdDoc = WrdApp.Documents.Add - - 'Loop through the Charts on my ACTIVE SHEET - For Each Rng In RngArray - - 'Set the Range - Set ExcRng = Rng - - 'Copy the range - Rng.Copy - - 'Pause the application for two seconds - Application.Wait Now + #12:00:02 AM# - - 'Paste the chart in the Word Document - With WrdApp.Selection - .PasteSpecial Link:=True, DataType:=wdPasteOLEObject - End With - - 'Add a new page - WrdApp.ActiveDocument.Sections.Add - - 'Go to the newly created page - WrdApp.Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext - - 'Clear Clipboard - Application.CutCopyMode = False - - Next Rng - -End Sub - - - +Attribute VB_Name = "Practice" +Option Explicit + +Sub RangeToWord_Single() + + 'Declare Word Object Variables + Dim WrdApp As Word.Application + Dim WrdDoc As Word.Document + + 'Declare Excel Object Variable + Dim ExcRng As Range + + 'Create a new instance of Word + Set WrdApp = New Word.Application + WrdApp.Visible = True + WrdApp.Activate + + 'Create a new word document + Set WrdDoc = WrdApp.Documents.Add + + 'Set the Range + Set ExcRng = ActiveSheet.Range("B2:E6") + + 'Copy the range + ExcRng.Copy + + 'Pause the application for two seconds + Application.Wait Now + #12:00:02 AM# + + 'Paste the chart in the Word Document + WrdDoc.Paragraphs(1).Range.PasteExcelTable LinkedToExcel:=True, WordFormatting:=False, RTF:=False + + 'Clear Clipboard + Application.CutCopyMode = False + +End Sub + +Sub RangeToWord_Multi() + + 'Declare Word Object Variables + Dim WrdApp As Word.Application + Dim WrdDoc As Word.Document + + 'Declare Excel Object Variable + Dim Rng As Variant + Dim ExcRng As Range + Dim RngArray As Variant + + 'Create a new instance of Word + Set WrdApp = New Word.Application + WrdApp.Visible = True + WrdApp.Activate + + 'Array that houses all of our ranges that we want to export + RngArray = Array(Worksheets("Sheet1").Range("B2:E6"), Worksheets("Sheet1").Range("B7:E10"), Worksheets("Sheet2").Range("B2:E5")) + + 'Create a new word document + Set WrdDoc = WrdApp.Documents.Add + + 'Loop through the Charts on my ACTIVE SHEET + For Each Rng In RngArray + + 'Set the Range + Set ExcRng = Rng + + 'Copy the range + Rng.Copy + + 'Pause the application for two seconds + Application.Wait Now + #12:00:02 AM# + + 'Paste the chart in the Word Document + With WrdApp.Selection + .PasteSpecial Link:=True, DataType:=wdPasteOLEObject + End With + + 'Add a new page + WrdApp.ActiveDocument.Sections.Add + + 'Go to the newly created page + WrdApp.Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext + + 'Clear Clipboard + Application.CutCopyMode = False + + Next Rng + +End Sub + + + diff --git a/vba/word-vba/Excel Table To Word.bas b/vba/vba-word/Excel To Word - Table.bas similarity index 96% rename from vba/word-vba/Excel Table To Word.bas rename to vba/vba-word/Excel To Word - Table.bas index 04917b3..8b482ad 100644 --- a/vba/word-vba/Excel Table To Word.bas +++ b/vba/vba-word/Excel To Word - Table.bas @@ -1,108 +1,108 @@ -Option Explicit - -Sub CopyTableToWord_Single() - - 'Declare Word Variables - Dim WrdApp As Word.Application - Dim WrdDoc As Word.Document - Dim WrdTbl As Word.Table - - 'Declare Excel Variables - Dim ExcLisObj As ListObject - - 'Create a new instance of Word - Set WrdApp = New Word.Application - WrdApp.Visible = True - WrdApp.Activate - - 'Create a new document in my application - Set WrdDoc = WrdApp.Documents.Add - - 'Define ListObject - Set ExcLisObj = ActiveSheet.ListObjects(1) - - 'Create a reference to the range I want to Copy. - ExcLisObj.Range.Copy - - 'Pause the Excel Application for 2 seconds - Application.Wait Now() + #12:00:01 AM# - - - With WrdApp.Selection - .PasteExcelTable LinkedToExcel:=True, WordFormatting:=True, RTF:=True - End With - - Set WrdTbl = WrdDoc.Tables(WrdDoc.Tables.Count) - WrdTbl.AllowAutoFit = True - WrdTbl.AutoFitBehavior (wdAutoFitWindow) - WrdTbl.Spacing = 19 - WrdTbl.Shading.BackgroundPatternColorIndex = wdBlue - - - 'Create a new page - WrdApp.ActiveDocument.Sections.Add - - 'Go to the newly created page - WrdApp.Selection.GoTo What:=wdGoToPage, which:=wdGoToNext - - 'Clear my clipboard - Application.CutCopyMode = False - - - WrdApp.Selection.GoTo What:=wdGoToPage, which:=wdGoToFirst - -End Sub - -Sub CopyTableToWord_Multi() - - 'Declare Word Variables - Dim WrdApp As Word.Application - Dim WrdDoc As Word.Document - Dim WrdTbl As Word.Table - - 'Declare Excel Variables - Dim ExcLisObj As ListObject - - 'Create a new instance of Word - Set WrdApp = New Word.Application - WrdApp.Visible = True - WrdApp.Activate - - 'Create a new document in my application - Set WrdDoc = WrdApp.Documents.Add - - 'Loop through each element in the range array - For Each ExcLisObj In ActiveSheet.ListObjects - - 'Create a reference to the range I want to Copy. - ExcLisObj.Range.Copy - - 'Pause the Excel Application for 2 seconds - Application.Wait Now() + #12:00:01 AM# - - - With WrdApp.Selection - .PasteExcelTable LinkedToExcel:=True, WordFormatting:=True, RTF:=True - End With - - Set WrdTbl = WrdDoc.Tables(WrdDoc.Tables.Count) - WrdTbl.AllowAutoFit = True - WrdTbl.AutoFitBehavior (wdAutoFitWindow) - WrdTbl.Spacing = 19 - WrdTbl.Shading.BackgroundPatternColorIndex = wdBlue - - - 'Create a new page - WrdApp.ActiveDocument.Sections.Add - - 'Go to the newly created page - WrdApp.Selection.GoTo What:=wdGoToPage, which:=wdGoToNext - - 'Clear my clipboard - Application.CutCopyMode = False - - Next - - WrdApp.Selection.GoTo What:=wdGoToPage, which:=wdGoToFirst - -End Sub +Option Explicit + +Sub CopyTableToWord_Single() + + 'Declare Word Variables + Dim WrdApp As Word.Application + Dim WrdDoc As Word.Document + Dim WrdTbl As Word.Table + + 'Declare Excel Variables + Dim ExcLisObj As ListObject + + 'Create a new instance of Word + Set WrdApp = New Word.Application + WrdApp.Visible = True + WrdApp.Activate + + 'Create a new document in my application + Set WrdDoc = WrdApp.Documents.Add + + 'Define ListObject + Set ExcLisObj = ActiveSheet.ListObjects(1) + + 'Create a reference to the range I want to Copy. + ExcLisObj.Range.Copy + + 'Pause the Excel Application for 2 seconds + Application.Wait Now() + #12:00:01 AM# + + + With WrdApp.Selection + .PasteExcelTable LinkedToExcel:=True, WordFormatting:=True, RTF:=True + End With + + Set WrdTbl = WrdDoc.Tables(WrdDoc.Tables.Count) + WrdTbl.AllowAutoFit = True + WrdTbl.AutoFitBehavior (wdAutoFitWindow) + WrdTbl.Spacing = 19 + WrdTbl.Shading.BackgroundPatternColorIndex = wdBlue + + + 'Create a new page + WrdApp.ActiveDocument.Sections.Add + + 'Go to the newly created page + WrdApp.Selection.GoTo What:=wdGoToPage, which:=wdGoToNext + + 'Clear my clipboard + Application.CutCopyMode = False + + + WrdApp.Selection.GoTo What:=wdGoToPage, which:=wdGoToFirst + +End Sub + +Sub CopyTableToWord_Multi() + + 'Declare Word Variables + Dim WrdApp As Word.Application + Dim WrdDoc As Word.Document + Dim WrdTbl As Word.Table + + 'Declare Excel Variables + Dim ExcLisObj As ListObject + + 'Create a new instance of Word + Set WrdApp = New Word.Application + WrdApp.Visible = True + WrdApp.Activate + + 'Create a new document in my application + Set WrdDoc = WrdApp.Documents.Add + + 'Loop through each element in the range array + For Each ExcLisObj In ActiveSheet.ListObjects + + 'Create a reference to the range I want to Copy. + ExcLisObj.Range.Copy + + 'Pause the Excel Application for 2 seconds + Application.Wait Now() + #12:00:01 AM# + + + With WrdApp.Selection + .PasteExcelTable LinkedToExcel:=True, WordFormatting:=True, RTF:=True + End With + + Set WrdTbl = WrdDoc.Tables(WrdDoc.Tables.Count) + WrdTbl.AllowAutoFit = True + WrdTbl.AutoFitBehavior (wdAutoFitWindow) + WrdTbl.Spacing = 19 + WrdTbl.Shading.BackgroundPatternColorIndex = wdBlue + + + 'Create a new page + WrdApp.ActiveDocument.Sections.Add + + 'Go to the newly created page + WrdApp.Selection.GoTo What:=wdGoToPage, which:=wdGoToNext + + 'Clear my clipboard + Application.CutCopyMode = False + + Next + + WrdApp.Selection.GoTo What:=wdGoToPage, which:=wdGoToFirst + +End Sub diff --git a/vba/word-vba/Align Shapes In Word.bas b/vba/vba-word/Word - Align Shapes.bas similarity index 96% rename from vba/word-vba/Align Shapes In Word.bas rename to vba/vba-word/Word - Align Shapes.bas index 90041aa..125d98d 100644 --- a/vba/word-vba/Align Shapes In Word.bas +++ b/vba/vba-word/Word - Align Shapes.bas @@ -1,119 +1,119 @@ -Attribute VB_Name = "Practice" -Sub ExportingToWord_MultiplePages() - - 'Declare Word Variables - Dim WrdApp As Word.Application - Dim WrdDoc As Word.Document - Dim WrdRng As Word.Range - Dim WrdShp As Word.InlineShape - - 'Declare Excel Variables - Dim ChrtObj As ChartObject - - 'Create a new instance of Word - Set WrdApp = New Word.Application - WrdApp.Visible = True - WrdApp.Activate - - 'Create a new word document - Set WrdDoc = WrdApp.Documents.Open("C:\Users\Alex\Desktop\MyWordDoc.docx") - - 'Loop through the charts on the active sheet - Set ChrtObj = ActiveSheet.ChartObjects(1) - - 'Copy the chart - ChrtObj.Chart.ChartArea.Copy - - 'PASTE TO A BOOKMARK - Set WrdRng = WrdDoc.Bookmarks("MyChartPosition").Range - - Application.Wait Now() + #12:00:03 AM# - - With WrdRng - .PasteSpecial DataType:=wdPasteMetafilePicture, Placement:=wdInLine - End With - - Set WrdShp = WrdDoc.InlineShapes(1) - - With WrdShp - .Height = WrdApp.InchesToPoints(1.5) - .Width = WrdApp.InchesToPoints(2.5) - End With - - 'PASTE TO A PARAGRAPH - Set WrdRng = WrdDoc.Paragraphs(4).Range - WrdRng.Collapse Direction:=wdCollapseStart - - With WrdRng - .PasteSpecial DataType:=wdPasteMetafilePicture, Placement:=wdInLine - .ParagraphFormat.SpaceAfter = 40 - .ParagraphFormat.SpaceBefore = 40 - End With - - Set WrdShp = WrdDoc.InlineShapes(2) - - With WrdShp - .Height = WrdApp.InchesToPoints(1.5) - .Width = WrdApp.InchesToPoints(2.5) - End With - - 'PASTE TO SECOND PAGE IN THE SECOND PARAGRAPH - Set WrdRng = WrdDoc.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=2) - Set WrdRng = WrdRng.Next(Unit:=wdParagraph) - WrdRng.Collapse Direction:=wdCollapseStart - - With WrdRng - .PasteSpecial DataType:=wdPasteMetafilePicture, Placement:=wdInLine - End With - - Set WrdShp = WrdDoc.InlineShapes(3) - - With WrdShp - .Height = WrdApp.InchesToPoints(1.5) - .Width = WrdApp.InchesToPoints(2.5) - .Range.ParagraphFormat.Alignment = wdAlignParagraphRight - End With - - 'PASTE TO SECTION - Set WrdRng = WrdDoc.Sections(2).Range.Paragraphs(2).Range - WrdRng.Collapse Direction:=wdCollapseStart - - With WrdRng - .PasteSpecial DataType:=wdPasteMetafilePicture, Placement:=wdInLine - End With - - 'PASTE INSIDE WORDS - Set WrdRng = WrdDoc.Paragraphs(1).Range.Words(10) - WrdRng.Collapse Direction:=wdCollapseStart - - With WrdRng - .PasteSpecial DataType:=wdPasteMetafilePicture, Placement:=wdInLine - End With - - Set WrdShp = WrdDoc.InlineShapes(1) - - With WrdShp - .Height = WrdApp.InchesToPoints(1.5) - .Width = WrdApp.InchesToPoints(2.5) - End With - - - - 'Clear the Clipboard - Application.CutCopyMode = False - - Set WrdRng = Nothing - -End Sub - - - -' Set WrdShp = WrdDoc.InlineShapes(WrdDoc.InlineShapes.Count) -' -' WrdShp.Select -' -' With WrdApp.Selection.ShapeRange -' .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage -' .RelativeVerticalPosition = wdRelativeHorizontalPositionMargin -' End With - +Attribute VB_Name = "Practice" +Sub ExportingToWord_MultiplePages() + + 'Declare Word Variables + Dim WrdApp As Word.Application + Dim WrdDoc As Word.Document + Dim WrdRng As Word.Range + Dim WrdShp As Word.InlineShape + + 'Declare Excel Variables + Dim ChrtObj As ChartObject + + 'Create a new instance of Word + Set WrdApp = New Word.Application + WrdApp.Visible = True + WrdApp.Activate + + 'Create a new word document + Set WrdDoc = WrdApp.Documents.Open("C:\Users\Alex\Desktop\MyWordDoc.docx") + + 'Loop through the charts on the active sheet + Set ChrtObj = ActiveSheet.ChartObjects(1) + + 'Copy the chart + ChrtObj.Chart.ChartArea.Copy + + 'PASTE TO A BOOKMARK + Set WrdRng = WrdDoc.Bookmarks("MyChartPosition").Range + + Application.Wait Now() + #12:00:03 AM# + + With WrdRng + .PasteSpecial DataType:=wdPasteMetafilePicture, Placement:=wdInLine + End With + + Set WrdShp = WrdDoc.InlineShapes(1) + + With WrdShp + .Height = WrdApp.InchesToPoints(1.5) + .Width = WrdApp.InchesToPoints(2.5) + End With + + 'PASTE TO A PARAGRAPH + Set WrdRng = WrdDoc.Paragraphs(4).Range + WrdRng.Collapse Direction:=wdCollapseStart + + With WrdRng + .PasteSpecial DataType:=wdPasteMetafilePicture, Placement:=wdInLine + .ParagraphFormat.SpaceAfter = 40 + .ParagraphFormat.SpaceBefore = 40 + End With + + Set WrdShp = WrdDoc.InlineShapes(2) + + With WrdShp + .Height = WrdApp.InchesToPoints(1.5) + .Width = WrdApp.InchesToPoints(2.5) + End With + + 'PASTE TO SECOND PAGE IN THE SECOND PARAGRAPH + Set WrdRng = WrdDoc.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=2) + Set WrdRng = WrdRng.Next(Unit:=wdParagraph) + WrdRng.Collapse Direction:=wdCollapseStart + + With WrdRng + .PasteSpecial DataType:=wdPasteMetafilePicture, Placement:=wdInLine + End With + + Set WrdShp = WrdDoc.InlineShapes(3) + + With WrdShp + .Height = WrdApp.InchesToPoints(1.5) + .Width = WrdApp.InchesToPoints(2.5) + .Range.ParagraphFormat.Alignment = wdAlignParagraphRight + End With + + 'PASTE TO SECTION + Set WrdRng = WrdDoc.Sections(2).Range.Paragraphs(2).Range + WrdRng.Collapse Direction:=wdCollapseStart + + With WrdRng + .PasteSpecial DataType:=wdPasteMetafilePicture, Placement:=wdInLine + End With + + 'PASTE INSIDE WORDS + Set WrdRng = WrdDoc.Paragraphs(1).Range.Words(10) + WrdRng.Collapse Direction:=wdCollapseStart + + With WrdRng + .PasteSpecial DataType:=wdPasteMetafilePicture, Placement:=wdInLine + End With + + Set WrdShp = WrdDoc.InlineShapes(1) + + With WrdShp + .Height = WrdApp.InchesToPoints(1.5) + .Width = WrdApp.InchesToPoints(2.5) + End With + + + + 'Clear the Clipboard + Application.CutCopyMode = False + + Set WrdRng = Nothing + +End Sub + + + +' Set WrdShp = WrdDoc.InlineShapes(WrdDoc.InlineShapes.Count) +' +' WrdShp.Select +' +' With WrdApp.Selection.ShapeRange +' .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage +' .RelativeVerticalPosition = wdRelativeHorizontalPositionMargin +' End With + diff --git a/vba/word-vba/Working With Building Blocks.bas b/vba/vba-word/Word - Building Blocks Object.bas similarity index 100% rename from vba/word-vba/Working With Building Blocks.bas rename to vba/vba-word/Word - Building Blocks Object.bas diff --git a/vba/word-vba/Working With Documents.bas b/vba/vba-word/Word - Document Object.bas similarity index 100% rename from vba/word-vba/Working With Documents.bas rename to vba/vba-word/Word - Document Object.bas diff --git a/vba/word-vba/Working With the Find Object.bas b/vba/vba-word/Word - Find Object.bas similarity index 100% rename from vba/word-vba/Working With the Find Object.bas rename to vba/vba-word/Word - Find Object.bas diff --git a/vba/word-vba/Headers & Footers.bas b/vba/vba-word/Word - Headers & Footers - Object.bas similarity index 100% rename from vba/word-vba/Headers & Footers.bas rename to vba/vba-word/Word - Headers & Footers - Object.bas diff --git a/vba/word-vba/Loop Through Words.bas b/vba/vba-word/Word - Navigate Words.bas similarity index 100% rename from vba/word-vba/Loop Through Words.bas rename to vba/vba-word/Word - Navigate Words.bas diff --git a/vba/word-vba/Working With Paragraphs.bas b/vba/vba-word/Word - Paragraph Object.bas similarity index 100% rename from vba/word-vba/Working With Paragraphs.bas rename to vba/vba-word/Word - Paragraph Object.bas diff --git a/vba/word-vba/Count Lines In Doc.bas b/vba/vba-word/Word - Statistics.bas similarity index 100% rename from vba/word-vba/Count Lines In Doc.bas rename to vba/vba-word/Word - Statistics.bas diff --git a/vba/word-vba/Working With Templates.bas b/vba/vba-word/Word - Template Object.bas similarity index 100% rename from vba/word-vba/Working With Templates.bas rename to vba/vba-word/Word - Template Object.bas